Я использую библиотеку поддержки Android и у меня есть 3 фрагмента активности. И у меня есть проблема: замена фрагмента удаляет другой фрагментAndroid: Замена фрагмента удаляет другой фрагмент
Моя активность:
public class MainActivity extends FragmentActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
// Add 3 fragments:
if (savedInstanceState == null) {
getFragmentManager().beginTransaction()
.add(R.id.container1, new A(), A.class.getCanonicalName())
.commit();
getFragmentManager().beginTransaction()
.add(R.id.container2, new B(), B.class.getCanonicalName())
.commit();
getFragmentManager().beginTransaction()
.add(R.id.container3, new C(), C.class.getCanonicalName())
.commit();
}
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
getMenuInflater().inflate(R.menu.main, menu);
return true;
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
int id = item.getItemId();
if (id == R.id.test) {
Fragment fragment = getFragmentManager().
findFragmentByTag(A.class.getCanonicalName());
if (fragment == null)
fragment = new A();
// Replace fragment A again
getFragmentManager()
.beginTransaction()
.replace(R.id.container1, fragment, fragment.getClass().getCanonicalName())
.commit();
// After this fragment B disappears
return true;
}
return super.onOptionsItemSelected(item);
}
}
я использую findFragmentByTag, чтобы избежать утечки памяти. Вы можете мне помочь?
Попробуйте добавить это к транзакции фрагмента, прежде чем совершить '// Добавить эту транзакцию в задний стек .addToBackStack()' –
Не уверен, что ваш вопрос ясен, потому что вы делаете .replace так, как ожидалось, заменяемый предыдущий фрагмент , Теперь, когда @IonutNegru говорит, что проблема в том, что вы не можете вернуться назад, используйте addToBackStack, но вопрос не ясен. – HpTerm
@HpTerm также прав, вы должны использовать add, чтобы избежать замены текущего фрагмента. Я пропустил это. Вы можете проверить официальную документацию на фрагменты. Также есть примеры для вашего случая. –