4

リストビューのlistitemsにデータを設定する際にあなたの助けが必要です。私のリストビューでは、各アイテムにViewPagerがあり、各ビューページャーには異なるデータが必要です。ビューページャーごとに異なるデータを設定する方法がわかりません。実際には、listitemインデックスに基づいて、データビューページャーを設定する必要があります。以下に貼り付けたコードスニペットを確認して、私を助けてください。

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

    }
}
}

ただし、ここでは、すべてのリストアイテムのビューページャーに同じデータが設定されています。理想的には、私の要件は異なるデータを設定することです。あなたがこれに対する解決策を持っている/知っているかどうか私に知らせてください。

4

2 に答える 2

0

これを試して

1) ViewPager を使用して項目レイアウトを設計します。2)アイテムの位置に基づいてビューページャーを設定するアダプターコードに注意してください 3)ビューホルダーでビューページャーの参照を保持します

これでいいと思います。また、UI の観点から、ViewPager を各リストビュー アイテム内に配置することはお勧めできません。listItem のいくつかのボタンをクリックして過度に開くことを試みることができます。

于 2014-01-11T13:44:19.983 に答える
0

Viewpager を ListItem として使用するのは悪い考えです。あなたの場合、それを機能させるには、次の変更を加えます。

 MyPagerAdapter adapter = new MyPagerAdapter(position);

PagerAdapter で:

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

そしてスイッチで:

  switch (mListPosition) {
......
}
于 2014-06-15T14:06:29.487 に答える