В MainActivity у меня есть NavigationDrawer, который выглядит следующим образом:ясно backstack/история navigationdrawer выбранного элемента
private void displayView(int position) {
ListFragment listFragment = null;
switch (position) {
case 0:
listFragment = new AlbumFragment();
break;
case 1:
listFragment = new TrackFragment();
break;
default:
break;
}
if (listFragment != null) {
FragmentManager fm = getSupportFragmentManager();
fm.beginTransaction().replace(R.id.frame_container, listFragment).commit();
// update selected item and title, then close the drawer
mDrawerList.setItemChecked(position, true);
mDrawerList.setSelection(position);
setTitle(navMenuTitles[position]);
mDrawerLayout.closeDrawer(mDrawerList);
} else {
// error in creating fragment
Log.e("MainActivity", "Error in creating fragment");
}
}
В моей AlbumFragment я могу переключиться на TrackFragment, нажав на ListItems.
@Override
public void onListItemClick(ListView l, View v, int position, long id) {
// get album & artist of selected album
String album = ((TextView) v.findViewById(R.id.albumTitle)).getText().toString();
String artist = ((TextView) v.findViewById(R.id.albumArtist)).getText().toString();
String[] albumFilter = {"albumFilter", album, artist};
// Create new fragment and transaction
Fragment newFragment = new TrackFragment();
Bundle args = new Bundle();
args.putStringArray("filter", albumFilter);
newFragment.setArguments(args);
FragmentTransaction transaction = this.getActivity().getSupportFragmentManager().beginTransaction();
// Replace whatever is in the fragment_container view with this fragment,
// and add the transaction to the back stack
transaction.replace(R.id.frame_container, newFragment);
transaction.addToBackStack(null);
transaction.commit();
}
Теперь возникает следующая проблема: Если я нажму BackButton все в порядке, и я вернулся в AlbumFragment. Но если я открою NavigationDrawer и выберем Tracksfragment, а затем нажмите Backbutton, я вернусь к AlbumFragment, а за ним по-прежнему остается TrackFragment.
Дальнейший пояснение: Когда я выбираю альбом в AlbumFragment, отображаются только треки из этого альбома. Если я выберу треки из всех дорожек NavDrawer, отобразится ALL.
Так что в основном все, что я хочу, это то, что вся Backstack-History очищается, как только я выбираю элемент из NavDrawer. Я уже пробовал большинство решений подобных проблем, найденных здесь, но к сожалению, до сих пор ничего не работало.
У кого-нибудь есть решение этой проблемы?
Я думал, что это может быть столь же легко, как добавить эту строку: 'fm.popBackStackImmediate()' перед совершением сделки в моя основная деятельность. Я также проверил BackStackEntryCount после этого, и он равен 0, поэтому он работает. Проблема в том, что я получаю исключение NullpointerException, вызванное AlbumFragment. Я не знаю, почему это выполняется после того, как я использую popBackStack() – f4b