0

3 つのフラグメントで構成される Android アプリを開発しています。そのうちの 1 つが ListFragment になり、その内容は他の Fragment で何が起こるかによって異なります。ViewPager オブジェクトを使用して、ユーザーがフラグメント間をスワイプできるようにします。これはそのアダプタークラスです:

private class SwypePagerAdapter extends FragmentPagerAdapter{
    private Fragment[] tabFragments; 

    public SwypePagerAdapter(FragmentManager fm) {
        super(fm);
        tabFragments=new Fragment[NUMBER_OF_TABS];
        tabFragments[0]= Fragment.instantiate(StatCalculatorActivity.this, InsertFrag.class.getName());
        tabFragments[1]= Fragment.instantiate(StatCalculatorActivity.this, ResultFrag.class.getName());
        tabFragments[2]= Fragment.instantiate(StatCalculatorActivity.this, ValuesFrag.class.getName());
    }

    @Override
    public Fragment getItem(int position) {
        return tabFragments[position];
    }

    @Override
    public int getCount() {
        return NUMBER_OF_TABS;
    }

}

アクティビティが破棄されてから再作成されるまで、すべてが完全に正常に機能します。この後、listFragment はロックされているように見えます。このフラグメントのアクティビティを破棄して再作成するまで、データは更新されません。どうしたの?どうすれば復元できますか?

更新: 私が本当に言いたいことを説明しているとは思いません。アクティビティを破棄して再作成した後、フラグメントは以前のものではないようです。古いものが新しいものと重なり合って、お互いに通信できなくなったようです...ちょうど私がそれらの参照を失ったように、しかしそれらはまだそこにあります...

4

2 に答える 2

1

データを破壊せずにそのまま残したい場合は、 PagerAdapter で次のようにコメントすることができます

@Override
    public void destroyItem(ViewGroup container, int position, Object object) {
        // TODO Auto-generated method stub
        //super.destroyItem(container, position, object);
    }
于 2012-09-14T15:22:11.647 に答える
0

フラグメントは、保持するように設定されていない限り、アクティビティとともに作成および破棄されます。データを維持するには、次の2つの方法のいずれかをお勧めします。

  • シリアル化可能にする
  • アクティビティのonCreateで接続する保持されたキャッシュフラグメントに保存します

2番目の方法は、フラグメントを作成し、フラグメントのonCreateに以下を追加し、ローテーションでアクティビティが破棄される前にデータを渡すことで実装できます。

@Override
public void onCreate(Bundle savedInstanceState) {
    setRetainInstance(true);
    super.onCreate(savedInstanceState);
}
于 2012-09-14T18:15:20.820 に答える