0

アプリには3つのフラグメントがあり、それぞれ3つのタブに分割されています[1][2][3]。

フラグメント[1]で、最初のテキストが「X」のTextViewが「Y」になるボタンを使用するとします。例:tv.setText("I'm a new text");

したがって、タブ間を移動してタブ[1]に戻ると、TextViewは元のテキストに戻ります。これは、onCreate()が再度呼び出しているかのようです。

どういうわけか、onStop()がフラグメントで呼び出されず、タブを交換している間、ビューのすべてのプロパティ(テキスト、可視性など)をメモリに保持したいと思います。

ありがとう!

----編集!--------

さて、私は私が望んでいたものの解決策を見つけました!それは私が宣言するのに十分簡単です:

mPager = (ViewPager) findViewById(R.id.pager);
mPager.setOffscreenPageLimit(3); //Number of fragments that I wish to store in memory 
4

2 に答える 2

0

これは、onCreateが実際に呼び出されているために発生します。私があなたなら、ViewPagerを使用します。そうすれば、offScreenElementNumberを2に設定するだけで、すべてのフラグメントが即座にロードされ、それらの状態が保持されます。

これを見てください:

http://tamsler.blogspot.com.es/2011/10/android-viewpager-and-fragments.html

于 2013-03-26T13:32:54.153 に答える
0

onCreateメソッドが再度呼び出されています。onSavedInstanceStateをオーバーライドして値を保存し、onActivityCreatedメソッドに戻すことができます。たとえば、ブール値を保存しましょう(string、intなど、好きなものを保存できます)。

値を保存します。

public void onSaveInstanceState(Bundle outState) {
        outState.putBoolean("booleanValue", true);
}

値を復元します(これはonCreateでも呼び出すことができます):

    protected void onActivityCreated(Bundle savedInstanceState) {
super.onActivityCreated(savedInstanceState);
            if (savedInstanceState != null && savedInstanceState.containsKey("booleanValue")) {
                boolean myBoolean = savedInstanceState.getBoolean("booleanValue");
            }
    }
于 2013-03-26T13:34:12.253 に答える