4

アプリケーションでフラグメントを使用して実験しています。アプリケーションを他のフラグメントに切り替えるときに、フラグメントによって使用されるデータを保存する方法を見つけようとしています。2番目のフラグメントのコードは次のとおりです。このフラグメントとの間で切り替えるときは、フラグメントの追加と削除を使用しています。これは、replaceを使用していたときに問題が発生したためです。他のフラグメントに切り替えて、このフラグメントに戻ると、カウントは保存されません。フラグメントが開いたときにカウントに戻ることができるように、実際にカウントを保存するにはどうすればよいですか?

public class BasicFragment2 extends Fragment {

public int count = 0;

@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
    if (savedInstanceState != null){
        count = savedInstanceState.getInt("Integer");
    }

    View view = inflater.inflate(R.layout.fragment_basic_2, container, false);

    Button button = (Button) view.findViewById(R.id.button2);

    // A simple OnClickListener for our button. You can see here how a Fragment can encapsulate
    // logic and views to build out re-usable Activity components.
    button.setOnClickListener(new OnClickListener() {

        public void onClick(View v) {
            Activity activity = getActivity();
            count++;

            if (activity != null) {
                Toast.makeText(activity, "This is not a fragment...Yes it is " + count, Toast.LENGTH_LONG).show();
            }
        }

    });

    return view;
}

public void onSaveInstanceState(Bundle outState){
    outState.putInt("Integer",count);
    super.onSaveInstanceState(outState);
}

}
4

1 に答える 1

2

クラスでオーバーライドonSaveInstanceStateしてActivity、カウント値をそこに保存してみてください。グーグルドキュメントによると:

ただし、このメソッドはonDestroy()の前であればいつでも呼び出すことができます。フラグメントの大部分が破棄される状況は数多くありますが(UIが表示されていない状態でバックスタックに配置された場合など)、フラグメントの状態は、所有するアクティビティが実際に状態を保存する必要があるまで保存されません。

于 2012-09-04T16:56:26.153 に答える