清除已选中的后退堆栈/历史记录导航抽屉项



在主活动中,我有一个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。

@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();
}

现在出现以下问题:如果我按后退按钮一切都很好,我又回到了专辑片段。但是,如果我打开导航抽屉并选择曲目片段,然后按后退按钮,我会回到专辑片段,它后面仍然是我的曲目片段。

进一步解释:当我在专辑片段中选择专辑时,仅显示此专辑中的曲目。如果我从导航抽屉中选择轨道,将显示所有轨道。

所以基本上我想要的是,一旦我从导航抽屉中选择一个项目,整个后退堆栈历史记录就会被清理干净。我已经尝试了这里发现的类似问题的大多数解决方案,但不幸的是,到目前为止没有任何效果。

有没有人解决这个问题?

使用 android.support.v4.content.IntentCompat 像这样:

Intent intent = IntentCompat.makeRestartActivityTask(new ComponentName(DrawerActivity.this, Tracksfragment.class));
startActivity(intent);

您可以在启动其他活动时在目的中设置以下标志:

    Intent intent = new Intent(this, MainActivity.class);
    intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_CLEAR_TASK);
    startActivity(intent);

希望这就是你要找的。

相关内容

  • 没有找到相关文章

最新更新