2013-11-14 212 views
9

我有一个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" /> 

主列表视图定制行项目查看寻呼机

<?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; 
} 

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

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

到:从

+0

我面临着同样的问题..你能告诉我,如果你修好了吗? – Coderji

+0

是的,我可以帮助你,让我看看你的代码,你在哪里得到相同的。我会建议发布一个问题与我的代码,我会检讨它并回答你。 –

+0

请在这里是我的问题http://stackoverflow.com/questions/20774098/viewpager-within-listview-row-item – Coderji

回答

0

变化instantiateItem(线)

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

我面临同样的问题。 只需给viewpager和需要的列表视图行布局的主容器赋予高度。

<?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> 

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

2

我创建样品应用

例ViewPager与片段https://dl.dropboxusercontent.com/u/20178650/builds/listviewwithviewpager.zip

BUT有一个很大的缺点。所有的细胞都存储在内存中,应用程序可以通过低内存崩溃,不管你有很多细胞

编辑:

经验上已经发现。如果使用简单查看代替片段ViewPager。 我可以正确地写一个适配器,而不是与内存

例ViewPager与视图来袭: https://dl.dropboxusercontent.com/u/20178650/builds/listviewwithviewpager_v2.zip

我希望有人能帮助

5

我也面临着同样的问题,并解决它在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; 
} 

希望这可以帮助你。

+0

这对我有效。但我不知道如何! –

+0

非常感谢你!我被困了一个月在这个和解决方案是如此简单,如此愚蠢..我仍然不明白 –

+0

当我试图在视图中使用此方法时收到异常“无法找到资源ID” –

-3
@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; 
} 
+0

你可以给你的代码添加一些上下文吗? – ppperry

+0

从构造函数中捕获的上下文 –