yinxiaopei
懒洋洋大人
采纳率75%
2015-06-05 08:40 阅读 2.7k

android viewpager根据数组的长度动态加载布局,隐藏控件无效。

布局文件

android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical" >

<android.support.v4.view.ViewPager
    android:id="@+id/viewpager"
    android:layout_width="match_parent"
    android:layout_height="0dp"
    android:layout_marginBottom="@dimen/margin_medium"
    android:layout_weight="10" >
</android.support.v4.view.ViewPager>

<LinearLayout
    android:id="@+id/viewGroup"
    android:layout_width="match_parent"
    android:layout_height="0dp"
    android:layout_weight="1"
    android:gravity="center"
    android:orientation="horizontal" >
</LinearLayout>

private void initViewPager() {
View view = null;
for (i = 0; i < videoNum//数量是根据从服务器取下的数据,长度是可变的
; i++) {
view = getActivity().getLayoutInflater().inflate(
R.layout.fragment_one_video, null);
viewList.add(view);
mRtspVideoView = (RtspVideoView) view.findViewById(R.id.rv_view);
mRtspVideoView.setPlaySize(Constants.SCREEN_WIDTH,
Constants.SCREEN_HEIGHT);
mIvLogo = (ImageView) view.findViewById(R.id.iv_logo);

在OnPageChangeListener里,操作了一个播放视频。我有一个线程在播放成功的时候,把未播放视频时候的mIvLogo隐藏。
private Handler videoHandler = new Handler() {

    @Override
    public void handleMessage(Message msg) {
        System.out.println("real video");
        mIvLogo.clearAnimation();//隐藏无效。如果是显示也是无效
        mIvLogo.setVisibility(View.GONE);
    }
};
不知道是什么原因,一直是无效的。我在滑动页面的其他操作是有效的。比如按页面的position获取数据是有效的。
  • 点赞
  • 写回答
  • 关注问题
  • 收藏
  • 复制链接分享

5条回答 默认 最新

  • 已采纳
    danielinbiti danielinbiti 2015-06-05 08:44
    mIvLogo = (ImageView) view.findViewById(R.id.iv_logo);这是在循环里,最后记录的是最后一次for循环的组件。
     private Handler videoHandler = new Handler() {
        @Override
        public void handleMessage(Message msg) {
            System.out.println("real video");
            mIvLogo.clearAnimation();//隐藏无效。如果是显示也是无效
            mIvLogo.setVisibility(View.GONE);//你点击的时候这个mIvLogo是最后一次view中的iv_logo
        }
    };
    
    点赞 评论 复制链接分享
  • qq_16366665 有点帅的程序员 2015-06-05 09:06

    mIvLogo = (ImageView) view.findViewById(R.id.iv_logo);在循环里只会赋值最后一个值

    点赞 评论 复制链接分享
  • qq_16366665 有点帅的程序员 2015-06-05 09:12

    你可以将那些需要显示隐藏的组件放集合里 根据Viewpager改变的position取出来对应的组件让其显示 其他的隐藏 不知道可不可以

    点赞 评论 复制链接分享
  • yinxiaopei 懒洋洋大人 2015-06-08 02:09

    谢谢各位的帮助 该问题已经解决 解决方法是
    mIvLogo = (ImageView) view.findViewById(R.id.iv_logo);
    mIvLogo.setTag(i + "page");
    在循环中给该控件设置tag,然后在OnPageChangeListener下的方法
    @Override
    public void onPageSelected(int page) {
    mIvLogo = (ImageView) mVPager.findViewWithTag(page + "page");//找到当前控件

    然后就可以隐藏该控件。

    点赞 评论 复制链接分享
  • datou431 请叫我头头哥 2015-06-10 07:27

    (ImageView) view.findViewById(R.id.iv_logo);在循环里只会赋值最后一个值

    点赞 评论 复制链接分享

相关推荐