11

私はこれPageAdapterを曜日で持っています、各ページャーのために私は同じレイアウトを持っています。私の問題は、曜日を変更するときに適切なlistViewを更新する方法です。ページャーが新しいページャーを作成し、他のページャーを削除する日を変更すると、これが発生したときに、リストビューは新しいページャーを指しますが、現在のページャーは指しません。たとえば、は水曜日で、リストビュー参照を保存します。火曜日に変更すると、月曜日のポケットベルが作成され、木曜日が削除され、最後のページへの参照ポイントが作成(月曜日)になりますが、火曜日になります。

私のpageAdapter:

ListView lvwConfig;

@Override
public Object instantiateItem(View pager, int position) {
    LayoutInflater inflater = (LayoutInflater) mContext
        .getSystemService(Context.LAYOUT_INFLATER_SERVICE);
    View v = inflater.inflate(R.layout.pager_layout, null);
    lvwConfig = (ListView) v.findViewById(R.id.lvwConfig);
    ((ViewPager) pager).addView(v, 0);

    return v;
}

ListView常に現在のアイテムのリストビューをポイントしたいと思います。

4

2 に答える 2

43

この投稿を読む: PagerAdapter

この関数は PagerAdapter で実装できます。

public int getItemPosition(Object object){
     return POSITION_NONE;
}

その後、この機能を使用できます:

yourPagerAdapterObject.notifyDataSetChanged();

ビューが多すぎて表示できない場合、この方法は不適切です。すべてのビューは常に再計算されます。しかし、あなたの場合、一部のビューでは問題ありません。

于 2012-05-16T06:47:33.713 に答える
6

PagerAdapter で getItemPosition をオーバーライドする方が簡単ですが、少し非効率的です。このように、 を呼び出すnotifyDataSetChanged()と、ビュー ページャーはすべてのビューを削除し、すべてを再読み込みします。このようにリロード効果が得られます。alvarolb によって提案された別のオプションは、新しいビューをインスタンス化するときにsetTag()メソッドを実行することです。instantiateItem()次に、 を使用する代わりに、 を使用して、更新するビューを見つけることnotifyDataSetChanged()ができます。findViewWithTag()

于 2014-05-13T15:00:36.177 に答える