サーバーから渡されたデータからページ (ビュー) のデータを描画する ViewPager をセットアップしました。場合によっては、サーバーが新しいデータを送信してビューを並べ替えたり (場合によっては新しいビューを追加したりします)、ユーザーが現在特定のフラグメントを表示している間に Android デバイスでシームレスにそれを行う必要があります。
新しいデータがサーバーから引き出されたときに notifyDataSetChanged() を呼び出すように設定しましたが、現在表示されているスライドの左右にキャッシュされたバージョンのスライドが保持されているようで、並べ替えによって変更される可能性があります。ここでこのトピックを見てきました: ViewPager PagerAdapter はビューを更新せず、表示されている現在のスライドをリロードする以外は正常に機能する最初のソリューションを実装しましたが、これは私の目的では機能しません。2番目の回答の同じページで提案されている setTag() メソッドの実装について詳しく調べました。これはスライドの情報を更新するのに役立ちますが、並べ替えには役立ちません。
現在表示されているスライドにげっぷを発生させずに、舞台裏ですべてのスライドを並べ替える方法はありますか?
ティア
編集:コードを追加し、さらに明確にするよう求める
これは私のアダプタークラスです。
private class ScreenSlidePagerAdapter extends FragmentPagerAdapter {
ContestEntriesModel entries;
public ScreenSlidePagerAdapter(FragmentManager fm, ContestEntriesModel Entries) {
super(fm);
this.entries = Entries;
}
@Override
public long getItemId(int position) {
return entries.entries[position].ContestEntryId;
}
@Override
public int getItemPosition(Object object) {
android.support.v4.app.Fragment f = (android.support.v4.app.Fragment)object;
for(int i = 0; i < getCount(); i++){
android.support.v4.app.Fragment fragment = getItem(i);
if(f.equals(fragment)){
return i;
}
}
return POSITION_NONE;
}
@Override
public android.support.v4.app.Fragment getItem(int position) {
long entryId = getItemId(position);
//Log.d("EntryIds",Integer.toString(entryId));
if(mItems.get(entryId) != null) {
return mItems.get(entryId);
}
Fragment f = ScreenSlidePageFragment.create(position);
mItems.put(entryId, f);
return f;
}
@Override
public int getCount() {
return NUM_PAGES;
}
}
そして、新しいペイロードがサーバーから降りてきたときに私が使用しているものは次のとおりです。
@Override
protected void onPostExecute(ContestEntriesModel entries) {
Fragment currentFragment = ContestEntries.mItems.get(ContestEntries.CurrentEntryId);
Log.d("fromUpdate",Long.toString(ContestEntries.CurrentEntryId));
ContestEntries.Entries = entries;
ContestEntries.NUM_PAGES = ContestEntries.Entries.entries.length;
ContestEntries.mPagerAdapter.notifyDataSetChanged();
ContestEntries.mPager.setCurrentItem(ContestEntries.mPagerAdapter.getItemPosition(currentFragment));
}