Jake Wharton のViewPagerIndicatorを使用して、スワイプ可能なタブを作成しています。現在、アプリで 4 つのタブを使用して動作させることができます。しかし、ページ/タブを変更すると、明らかに各フラグメントが再作成されます。たとえば、タブ A にいて、タブ C に変更してからタブ A に戻ると、A タブのフラグメントが再作成され、古いフラグメントがページの前面に表示されるだけではありません。
私は図書館の例に従おうとします。これが私のコードがどのように見えるかです:
ProfileViewPagerActivity
private static final String[] TAB_TITLES = new String[] { "Info",
"Personal Event", "Favorite", "Attending" };
TestFragmentAdapter mAdapter;
ViewPager mPager;
PageIndicator mIndicator;
int action;
User user;
@Override
protected void onCreate(Bundle arg0) {
// TODO Auto-generated method stub
super.onCreate(arg0);
setContentView(R.layout.simple_tabs);
action = getIntent().getIntExtra(Constants.LOAD_WHAT, Constants.LOAD_MY_PROFILE);
user = (User) getIntent().getSerializableExtra(Constants.USER);
mAdapter = new TestFragmentAdapter(getSupportFragmentManager());
mPager = (ViewPager) findViewById(R.id.pager);
mPager.setAdapter(mAdapter);
mIndicator = (TabPageIndicator) findViewById(R.id.indicator);
mIndicator.setViewPager(mPager);
}
そして、これは ProfileViewPagerActivity 内のクラスとしてのアダプターです
テストフラグメントアダプター
private int mCount = TAB_TITLES.length;
public TestFragmentAdapter(FragmentManager fm) {
super(fm);
}
@Override
public Fragment getItem(int position) {
switch (position) {
case 0:
return UserInfoFragment.newInstance(action,user);
case 1:
return EventListFragment.newInstance(user.getUsername(), Constants.LIST_MINE, action);
case 2:
return EventListFragment.newInstance(user.getUsername(), Constants.LIST_FAVORITE, action);
case 3:
return EventListFragment.newInstance(user.getUsername(), Constants.LIST_ATTENDED, action);
}
return null;
}
@Override
public int getCount() {
return mCount;
}
@Override
public CharSequence getPageTitle(int position) {
return TAB_TITLES[position].toUpperCase(Locale.US);
}
上記のコードを使用すると、タブを変更するたびにフラグメントが再作成されます。TestFragmentAdapter コンストラクター内の各フラグメントに対して newInstance() メソッドを呼び出すなど、別のアプローチを試みてから、getItem メソッドで既に持っているフラグメント オブジェクトを呼び出すだけで、まだ機能しません。
私がすでに試した別の解決策は、各フラグメントでInstanceStateを保存することですが、うまくいきません。何か不足していますか?前もって感謝します。
編集
申し訳ありませんが、私の間違いです。「再インスタンス化されたフラグメント」関連の質問ではないと思います。さらにデバッグを行った後、フラグメントが FragmentAdapter に表示された場合、データのみが再度リロードされることがわかりました。私のフラグメントでは、OnCreateView メソッドで Web サーバーからデータをロードします。Android ドキュメントから、この問題を解決するには OnCreate メソッドに必要なデータをロードする必要があると思います。ありがとう。