简体   繁体   English

listview在android中的每个列表项中都有viewpager

[英]listview having viewpager in each list item in android

I'm in need of your help while setting the data to listitems in a listview. 在列表视图中将数据设置为列表项时,我需要您的帮助。 In my listview each item is having a ViewPager and each viewpager should have different data. 在我的listview中,每个项目都有一个ViewPager,每个viewpager应该有不同的数据。 I'm not getting how to set different data to each viewpager. 我没有得到如何为每个viewpager设置不同的数据。 Actually based on the listitem index I need to set the data viewpager. 实际上基于listitem索引我需要设置数据viewpager。 Please go through my code snippet pasted below and try to help me out. 请仔细阅读下面粘贴的代码段并尝试帮助我。

public class MyListAdapter extends BaseAdapter {

private Activity activity;
private String [] titleData;
private int [] imageData;
private static LayoutInflater inflater=null;

private int iListPosition;
private GraphicalView graphView ;
ListView dashListView;
private Context context;
public MyListAdapter(View listView, Activity a, String[] titles, int[] images) {
    activity = a;

    context = a.getApplicationContext();
    dashListView = (ListView)listView;
}

public int getCount() {
    return titleData.length;
}

public Object getItem(int position) {
    return position;
}

public long getItemId(int position) {
    iListPosition = position;
    return position;
}

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


    LayoutInflater inflater = (LayoutInflater) activity.getApplicationContext()
            .getSystemService(Context.LAYOUT_INFLATER_SERVICE);
    View rowView = inflater.inflate(R.layout.dash_board_list_row, parent, false);



MyPagerAdapter adapter = new MyPagerAdapter();
    ViewPager myPager = (ViewPager) rowView.findViewById(R.id.threepageviewer);
    myPager.setAdapter(adapter);
    myPager.setCurrentItem(0);

    return rowView;
} 

private class MyPagerAdapter extends PagerAdapter {

    public int getCount() {
            return 3;
    }

    public Object instantiateItem(View collection, int position) {

            LayoutInflater inflater = (LayoutInflater) collection.getContext()
                            .getSystemService(Context.LAYOUT_INFLATER_SERVICE);

            int resId = 0;
            switch (position) {
            case 0:
                    resId = R.layout.weight_middle;


                    break;
            case 1:
                    resId = R.layout.weight_left;
                    break;
            case 2:
                    resId = R.layout.weight_right;
                    break;
            }

            View view = inflater.inflate(resId, null);
            if(resId == R.layout.weight_left  && iListPosition == 0){
            LinearLayout layout = (LinearLayout) view.findViewById(R.id.chartView);
            layout.addView(graphView);
           }

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

            return view;
    }

    @Override
    public void destroyItem(View arg0, int arg1, Object arg2) {
            ((ViewPager) arg0).removeView((View) arg2);

    }

    @Override
    public void finishUpdate(View arg0) {
            // TODO Auto-generated method stub

    }

    @Override
    public boolean isViewFromObject(View arg0, Object arg1) {
            return arg0 == ((View) arg1);

    }

    @Override
    public void restoreState(Parcelable arg0, ClassLoader arg1) {
            // TODO Auto-generated method stub

    }

    @Override
    public Parcelable saveState() {
            // TODO Auto-generated method stub
            return null;
    }

    @Override
    public void startUpdate(View arg0) {
            // TODO Auto-generated method stub

    }
}
}

But here the same data is geting set to the Viewpagers of all the list items. 但是这里相同的数据是设置到所有列表项的Viewpagers。 Ideally my requirement is to set different data. 理想情况下,我的要求是设置不同的数据。 Please let me know if you have/know any solution for this. 如果您有/知道任何解决方案,请告诉我。

Try this 尝试这个

1) Design your item layout with ViewPager in it. 1)使用ViewPager设计项目布局。 2) Takecare in you adapter code to populate viewpager based on the item position 3) Keep reference of Viewpager in Viewholder 2)在你的适配器代码中注意根据项目位置填充viewpager 3)在Viewholder中保持Viewpager的参考

I think this should do. 我认为应该这样做。 Also, It is bad idea from UI perspective to put ViewPager inside each listview item. 另外,从UI角度来看,将ViewPager放在每个listview项中是个坏主意。 You can rather try to open overly on some button click in listItem. 您可以尝试在listItem中单击按钮时过度打开。

Using Viewpager as ListItem is a bad idea, in your case to make it work make the following change. 使用Viewpager作为ListItem是一个坏主意,在您的情况下,使其工作进行以下更改。

 MyPagerAdapter adapter = new MyPagerAdapter(position);

in PagerAdapter: 在PagerAdapter中:

private class MyPagerAdapter extends PagerAdapter {
    int mListPosition;
MyPagerAdapter(int listPosition) {
   mListPosition = listPosition;
}
public int getCount() {
        return 3;
}

and in switch: 并在开关中:

  switch (mListPosition) {
......
}

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM