私は、いくつかのアイテムを含むナビゲーションビューを持っています。あるアイテムが押されると、そのフラグメントに移動します。たとえば、「ホーム」項目を押すと、引き出しの上にホームフラグメントが表示されます。フラグメントを破壊しないようにするにはどうしたらいいですか?
navigationView = (NavigationView)findViewById(R.id.navigation_view);
navigationView.setNavigationItemSelectedListener(new NavigationView.OnNavigationItemSelectedListener() {
@Override
public boolean onNavigationItemSelected(MenuItem item) {
switch (item.getItemId()) {
case R.id.home_id:
HomeFragment homeFragment = (HomeFragment) fragmentManager.findFragmentByTag("Home");
if (homeFragment == null)
homeFragment = new HomeFragment();
fragmentTransaction = fragmentManager.beginTransaction();
fragmentTransaction.replace(R.id.Main, homeFragment, "Home");
fragmentTransaction.commit();
getSupportActionBar().setTitle("Home");
item.setChecked(true);
drawerLayout.closeDrawers();
break;
case R.id.chat_id:
ChatFragment chatFragment = (ChatFragment) fragmentManager.findFragmentByTag("Chat");
if (chatFragment == null)
chatFragment = new ChatFragment();
fragmentTransaction = fragmentManager.beginTransaction();
fragmentTransaction.replace(R.id.Main, chatFragment, "Chat");
fragmentTransaction.commit();
getSupportActionBar().setTitle("Chat");
item.setChecked(true);
drawerLayout.closeDrawers();
break;
}
}
}
それでは、私だと思うが起こっていることは、私はreplace()
メソッドを使用していたときに、それがチャットフラグメントを破壊していることです。チャット・フラグメントのデータを持っていて、フラグメントを変更したときにデータが消えないようにしたいのですが?私は、このオーバーライドメソッドを入れているChatFragment
クラスで
:私は私のアプリでフラグメントを切り替える際さて、このメソッドが呼び出されません
@Override
public void onSaveInstanceState(Bundle outState)
{
Log.d("CHATFRAG", "onSaveInstanceState: been called ");
super.onSaveInstanceState(outState);
outState.putString("textView",textView.getText().toString());
//Save the fragment's state here
}
、断片を意味破壊されています。
画面に表示されている現在のフラグメントを、目的のフラグメント(両方を破壊することなく)と入れ替えることのできる方法はありますか? 私は断片(最大10個)を持つでしょう、重複したコードを必要としない最適化されたソリューションはありますか?あなたのナビゲーションコードで次に
private HomeFragment homeFragment;
private ChatFragment chatFragment;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.my_activity);
homeFragment = new HomeFragment();
chatFragment = new ChatFragment();
}
:
フラグメントを置き換えた場合、置き換えられるフラグメントは破棄されます。つまり、フラグメントのライフサイクルです。あなたが失うことがないデータを持っているなら、あなたはそのデータを装置のどこかに格納するべきです – tyczj