0

フラグメントを使用してタブレット アプリケーションを作成しようとしています。画面の左側には 4 つのボタンが表示され、クリックしたボタンによって画面の右側が変化します。メイン アクティビティと 4 つのフラグメントを作成しました。各フラグメントには、いくつかの TextView フィールドを持つ独自のレイアウトがあります。アプリケーションが起動すると、すべてのフラグメントが RAM にロードされます。これにより、フラグメントのステータスを維持できるため、ユーザーがフラグメントから別のフラグメントに切り替えたときに、最後の送信ボタンをクリックするまで、すべてのテキスト フィールドのテキスト値が保持されます。アプリは SDK 4.1 に基づいています。アプリは、特に起動時に少し遅いです。それが適切に設計されているかどうか、そしてそれを改善する方法があるかどうか疑問に思っていましたか?

以下は、主なアクティビティ クラスです。

import android.app.Activity;
import android.app.Fragment;
import android.app.FragmentTransaction;
import android.os.Bundle;
import android.view.Menu;
import android.view.View;
import android.widget.Button;

public class MainActivity extends Activity {

    private Button buttonOne;
    private Button buttonTwo;
    private Button buttonThree;
    private Button buttonFour;

    private Fragment fragmentOne;
    private Fragment fragmentTwo;
    private Fragment fragmentThree;
    private Fragment fragmentFour;

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        buttonOne = (Button) findViewById(R.id.button_one);
        buttonTwo = (Button) findViewById(R.id.button_two);
        buttonThree = (Button) findViewById(R.id.button_three);
        buttonFour = (Button) findViewById(R.id.button_four);

        fragmentOne = new FragmentOne();
        fragmentTwo = new FragmentTwo();
        fragmentThree = new FragmentThree();
        fragmentFour = new FragmentFour();

        FragmentTransaction fragmentTransaction = getFragmentManager()
                .beginTransaction();

        fragmentTransaction.add(R.id.frameLayout_one, fragmentOne);
        fragmentTransaction.add(R.id.frameLayout_one, fragmentTwo);
        fragmentTransaction.add(R.id.frameLayout_one, fragmentThree);
        fragmentTransaction.add(R.id.frameLayout_one, fragmentFour);

        fragmentTransaction.commit();

        buttonOne.setOnClickListener(new View.OnClickListener() {
            public void onClick(View view) {

                FragmentTransaction fragmentTransaction = getFragmentManager()
                        .beginTransaction();
                fragmentTransaction.show(fragmentOne);
                fragmentTransaction.hide(fragmentTwo);
                fragmentTransaction.hide(fragmentThree);
                fragmentTransaction.hide(fragmentFour);

                fragmentTransaction.commit();

            }
        });

        buttonTwo.setOnClickListener(new View.OnClickListener() {
            public void onClick(View view) {

                FragmentTransaction fragmentTransaction = getFragmentManager()
                        .beginTransaction();
                fragmentTransaction.hide(fragmentOne);
                fragmentTransaction.show(fragmentTwo);
                fragmentTransaction.hide(fragmentThree);
                fragmentTransaction.hide(fragmentFour);

                fragmentTransaction.commit();

            }
        });
        buttonThree.setOnClickListener(new View.OnClickListener() {
            public void onClick(View view) {

                FragmentTransaction fragmentTransaction = getFragmentManager()
                        .beginTransaction();
                fragmentTransaction.hide(fragmentOne);
                fragmentTransaction.hide(fragmentTwo);
                fragmentTransaction.show(fragmentThree);
                fragmentTransaction.hide(fragmentFour);

                fragmentTransaction.commit();

            }
        });
        buttonFour.setOnClickListener(new View.OnClickListener() {
            public void onClick(View view) {

                FragmentTransaction fragmentTransaction = getFragmentManager()
                        .beginTransaction();
                fragmentTransaction.hide(fragmentOne);
                fragmentTransaction.hide(fragmentTwo);
                fragmentTransaction.hide(fragmentThree);
                fragmentTransaction.show(fragmentFour);

                fragmentTransaction.commit();

            }
        });

    }
4

1 に答える 1

3

FragmentStateViewPager の使用を検討してください。

理想的な世界では、あなたの場合のように切り替えているいくつかのフラグメントがある場合、おそらくそれらを RAM に保持したくないでしょう。2つか3つのフラグメントはおそらく大丈夫です.4つ以上はそれを押し始めています.

FragmentStateViewPager は、フラグメントが「画面外」に移動すると、フラグメントの状態を自動的に切り離して保存します。

非 UI メンバー変数の状態を保存するには、各フラグメントに onSaveInstanceState を実装する必要があります (UI ビューは状態を自動的に保存します)。次に、onCreate または onCreateView でそれらを復元します。

*もちろん、フラグメントの onCreate/onCreateViews が遅い場合、これはあまり役に立ちません。まず、フラグメントの作成が高速であることを確認します... onCreate/onCreate ビューから onResume に移動できるコードを探すことから始めます。

于 2012-11-09T19:40:54.113 に答える