【问题标题】:View Pager as List View Row Item以列表视图行项目查看寻呼机
【发布时间】:2013-11-14 10:33:48
【问题描述】:

我有一个包含 20 行的列表视图,我想将视图寻呼机设置为列表视图中的每一行。由于列表视图行中的项目可能一个或多个,我想使用视图分页器显示列表视图行项目。

为此,我使用以下代码:

将在列表视图行中显示的自定义布局(作为分页器项)

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/inner_layout"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:gravity="center"
    android:orientation="horizontal" >

    <ImageView
        android:id="@+id/icon"
        android:layout_width="wrap_content"
        android:layout_height="fill_parent"
        android:layout_marginRight="6.0dip"
        android:src="@drawable/ic_launcher" />

    <TextView
        android:id="@+id/text"
        android:layout_width="wrap_content"
        android:layout_height="fill_parent"
        android:gravity="center_vertical"
        android:text="Example Value"
        android:textAppearance="?android:textAppearanceMedium" />

具有 View Pager 的主列表视图自定义行项目

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    android:orientation="horizontal" >


         <android.support.v4.view.ViewPager
        android:id="@+id/mypager"
        android:layout_width="match_parent"
        android:layout_height="match_parent" />

</RelativeLayout>

MyPagerAdapter 类

public class MyPagerAdapter extends PagerAdapter {

    private Context context;

    public MyPagerAdapter(Context context) {
        this.context = context;
    }

    @Override
    public int getCount() {
        return 4;
    }

    @Override
    public Object instantiateItem(View container, int position) {
        LayoutInflater inflater = (LayoutInflater) context
        .getSystemService(Context.LAYOUT_INFLATER_SERVICE);
        LinearLayout view = inflater.inflate(R.layout.inner_layout_file, null);
        ((ViewPager) container).addView(view, position);
        return view;
    }

    @Override
    public boolean isViewFromObject(View view, Object obj) {
        return view == ((View) obj);
    }

    @Override
    public void destroyItem(View container, int position, Object object) {
        // TODO Auto-generated method stub
        ((ViewPager) container).removeView((View) object);
    }
}

列表视图适配器获取视图方法

@Override
public View getView(int position, View convertView, ViewGroup parent) {


    LayoutInflater inflater = (LayoutInflater)context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
    convertView = inflater.inflate(R.layout.horizontal_list_item, null,false);

    MyPagerAdapter adapter = new MyPagerAdapter(context);
    ViewPager myPager = (ViewPager) convertView.findViewById(R.id.mypager);
    myPager.setAdapter(adapter);

    myPager.setCurrentItem(0);

    return convertView;
}

我没有收到任何错误,运行后呈现的视图总是空的。

【问题讨论】:

  • 我也面临同样的问题..你能告诉你是否解决了吗?
  • 是的,我可以帮助你,告诉我你的代码在哪里你得到了相同的。我建议用你的代码发布一个问题,我会审查它并回答你。
  • 我的问题有什么运气吗?!.. 希望你能帮助我,或者至少解决你的问题并将其标记为正确,这样我们就可以与之相关。很抱歉打扰您,提前致谢

标签: android listview android-viewpager


【解决方案1】:

我遇到了同样的问题,并通过在 getView() 方法中动态地向 viewpager 提供 id 来解决它。

@Override
public View getView(int position, View convertView, ViewGroup parent) {


    LayoutInflater inflater = (LayoutInflater)context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
    convertView = inflater.inflate(R.layout.horizontal_list_item, null,false);

    MyPagerAdapter adapter = new MyPagerAdapter(context);
    ViewPager myPager = (ViewPager) convertView.findViewById(R.id.mypager);

    **myPager.setId(position + getCount());**

    myPager.setAdapter(adapter);

    myPager.setCurrentItem(0);

    return convertView;
}

希望对您有所帮助。

【讨论】:

  • 非常感谢!!我被困了一个月,解决方案是如此简单和愚蠢..我还是不明白
  • 我在尝试将此方法与查看器一起使用时遇到异常“无法找到资源 ID”
  • 这行得通。但是当我向下滚动并向上滚动时,viewpager 是黑色的。 (它在物理上占据空间,但除此之外它是空白的)
【解决方案2】:

我遇到了同样的问题。 只需为 viewpager 和如果需要您的 List View Row 布局的主容器提供高度。

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent"
    android:layout_height="40dip"
    android:orientation="horizontal" >


         <android.support.v4.view.ViewPager
        android:id="@+id/mypager"
        android:layout_width="match_parent"
        android:layout_height="40dip" />

</RelativeLayout>

高度必须由固定值设置。如果你想让它动态化,你可以尝试在运行时在你的编码中设置它。

【讨论】:

    【解决方案3】:

    我创建了示例应用

    带有片段的 ViewPager 示例https://dl.dropboxusercontent.com/u/20178650/builds/listviewwithviewpager.zip

    但是有一个很大的缺点。所有的单元格都存储在内存中,应用程序可能会因内存不足而崩溃,无论您是否有很多单元格

    编辑:

    根据经验,它已经找到了。如果在 ViewPager 中使用简单的视图而不是片段。 我可以正确写一个适配器,而且不会被内存打动

    ViewPager 示例: https://dl.dropboxusercontent.com/u/20178650/builds/listviewwithviewpager_v2.zip

    希望有人能帮忙

    【讨论】:

      【解决方案4】:

      将 instantiateItem() 中的行从:

      ((ViewPager) container).addView(view, position);
      

      到:

      ((ViewPager) container).addView(view, 0);
      

      【讨论】:

        【解决方案5】:
        @Override
        public View getView(int position, View convertView, ViewGroup parent) {
        
            ViewHolder viewHolder;
        
        
                LayoutInflater inflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
                convertView = inflater.inflate(R.layout.listview_row, parent, false);
                CustomeListModel customeListModel = arrayList.get(position);
                Utils.d("debug", "in get view method ");
        
                MyPagerAdapter adapter = new MyPagerAdapter(context, customeListModel);
                viewHolder=new ViewHolder();
        
                viewHolder.viewPager= (ViewPager) convertView.findViewById(R.id.mypager);
                viewHolder.viewPager.setId(position + getCount());
                viewHolder.viewPager.setAdapter(adapter);
            viewHolder.viewPager.setMinimumWidth(100);
            viewHolder.viewPager.setCurrentItem(1);
        
            viewHolder.viewPager.setPageMargin(-380);
        
            convertView.setTag(viewHolder);
        
            return convertView;
        }
        

        【讨论】:

        • 从构造函数中捕获的上下文
        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2013-10-03
        相关资源
        最近更新 更多