ViewPagerのリストを実装したいと思います。 ListViewの各項目はViewPagerです。これまでのところ動作します。私の問題は、私はViewPagerの状態を維持できないということです。たとえば、リスト内の最初のViewPagerのページを変更するとき、最初のViewPagerが表示されなくなるまでスクロールしてからもう一度スクロールすると、最初のViewPagerに最初のページが再び表示されます。ListViewでViewPagerの状態を維持する方法は?
私はListView用とViewPager用の2つのアダプタを作成しました。私は、ListAdapterのgetViewメソッドのconvertViewパラメータからビューをリサイクルしようとしています。 ViewPagerAdapterでそれをどうやって行うのか、私が正しくやっているかどうかはわかりません。
アイデア?ここ
は、これまでの私のコードです:MyListAdapterから
getViewメソッド:ViewPagerAdapterから
@Override
public View getView(int position, View convertView, ViewGroup parent) {
if(convertView == null){
LayoutInflater inflater = (LayoutInflater) mContext.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
mRowView = inflater.inflate(R.layout.listitem, parent, false);
}else{
mRowView=convertView;
}
switch(position){
case 0://Fussball
ViewPagerAdapter fussballAdapter = new ViewPagerAdapter(mContext,"Fussball");
ViewPager fussballPager = (ViewPager) mRowView.findViewById(R.id.viewpager1);
fussballPager.setAdapter(fussballAdapter);
break;
case 1://Handball
ViewPagerAdapter handballAdapter = new ViewPagerAdapter(mContext,"Handball");
ViewPager handballPager = (ViewPager) mRowView.findViewById(R.id.viewpager1);
handballPager.setAdapter(handballAdapter);
break;
//.../
default:
//Do nothing
}
return mRowView;
}
instantiateItem:
@Override
public Object instantiateItem(View pager, int position) {
inflater = (LayoutInflater) context
.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
switch(position){
case 0:
oneLayout=inflater.inflate(R.layout.table_layout, null);
break;
case 1:
oneLayout=inflater.inflate(R.layout.table_layout_second, null);
break;
default:
oneLayout=inflater.inflate(R.layout.table_layout, null);
break;
}
((ViewPager)pager).addView(oneLayout, 0);
return oneLayout;
}
ありがとう! :)
ページャが移動すると、現在の位置を見つける必要があります。)最初のページから次のページに移動しますか? –
ViewPagerAdapterにはgetPosition()関数などがあります。 –
ありがとう、フランク。私はすでに同様のソリューションについて考えていましたが、私の問題はMyListViewAdapterの内部から現在のViewPagerの位置を取得することです。 getCurrentItem()と呼ばれるメソッドがありますが、私はいつも "0"を返します。 (私は、getViewメソッド内でViewPagerのオブジェクトに使用します) – kiberNet