私は、アプリケーションがバックグラウンドで時々殺されるので、アクティビティの現在の断片を復元しようとしています。私はputFragment()
を使用して現在のフラグメントをonSaveInstanceState()
に保存し、onRestoreInstanceState()
にgetFragment()
を使用して、アプリケーションが終了する前に現在のフラグメントの保存されたインスタンスを取得します。これはホスティングアクティビティで行われます。 MainActivityでフラグメントが2回再現される
onSaveInstanceState():MainActivityで
@Override
public void onSaveInstanceState(Bundle outState, PersistableBundle outPersistentState) {
getSupportFragmentManager().putFragment(outState, "fragment", getSupportFragmentManager()
.findFragmentById(R.id.mainfrag));
super.onSaveInstanceState(outState, outPersistentState);
}
onRestoreInstanceState()():
@Override
protected void onRestoreInstanceState(Bundle savedInstanceState) {
super.onRestoreInstanceState(savedInstanceState);
Fragment current = getSupportFragmentManager().getFragment(savedInstanceState, "fragment");
FragmentTransaction ft = getSupportFragmentManager().beginTransaction();
if (current instanceof SubCat) {
current = new SubCat();
}
ft.replace(R.id.mainfrag, current); //error-line (MainActivity.java:185)
ft.addToBackStack(null);
ft.commit();
}
私がテストしSubCat()
フラグメントを使用し、それだけの断片の一つですアプリ、したがって、SubCat()
フラグメントがフォアグラウンド/可視にあるとき、私は意図的にアプリケーション全体をバックグラウンドに置くか、またはアプリケーションを最小限に抑えて、何らかのt ime、私はアプリに戻ると、最後のフラグメント(この場合はSubCat()
)が復元されますが、フラグメントのインスタンスも保存する必要があります。
さて問題は、最初はcat_id
の実際の値はonActivityCreated()
にバンドルから取得されますが、いくつかのフラグメントが再び再作成されており、この時点でonActivityCreated()
が値になりますどのと呼ばれていないか、フラグメントが二回再現していることですcat_id
nullです。
断片:私は私が間違っているのかわからない
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
arr = new ArrayList<>();
if (getArguments() != null) {
String[] data = getArguments().getStringArray("cat_data");
cat_id = data[0];
cat_name = data[1];
}
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
if (view == null) {
view = inflater.inflate(R.layout.fragment_sub_category, container, false);
progress = view.findViewById(R.id.progress);
layoutManager = new LinearLayoutManager(getActivity());
recyclerView = view.findViewById(R.id.recycler);
recyclerView.setHasFixedSize(true);
recyclerView.setLayoutManager(layoutManager);
subCatAdapter = new SubCatAdapter(arr, getActivity());
recyclerView.setAdapter(subCatAdapter);
subCatAdapter.setOnClickListener(this);
doThis(); //request data from server
}
return view;
}
@Override
public void onSaveInstanceState(Bundle outState) {
outState.putString("cat_id", cat_id);
outState.putString("cat_name", cat_name);
super.onSaveInstanceState(outState);
}
@Override
public void onActivityCreated(@Nullable Bundle savedInstanceState) {
super.onActivityCreated(savedInstanceState);
if (savedInstanceState != null) {
cat_id = savedInstanceState.getString("cat_id");
cat_name = savedInstanceState.getString("cat_name");
}
}
は、事前に、感謝を助けてください。
あなたのエラーを共有してください。 – YoLo
エラーはありません.cat_idは空の値を返します。これは想定されていません。アプリがバックグラウンドに進む前に値を持っています。 –