简体   繁体   English

如何在返回按钮按下时退出Android导航抽屉

[英]How to Android Navigation drawer exits on Back Button press

I found similar queries asked before and tried some; 我发现之前曾问过类似的问题并尝试了一些。 but not working for me. 但不为我工作。

I have a main activity with a single fragment container in the layout. 我有一个主要活动,在布局中有一个片段容器。 I have 3 fragments that will get replaced with the fragment container based on the navigation drawer selection. 我有3个片段,这些片段将根据导航抽屉的选择被片段容器替换。 And I am adding all transactions to back stack. 我正在将所有事务添加到堆栈中。

I wanted to set the activity with Tracker fragment as the home screen so that when user presses back button, he should go to the very first fragment. 我想将Tracker片段设置为活动作为主屏幕,以便当用户按下“后退”按钮时,他应该转到第一个片段。 If he is already in first fragment, thed the application should exit. 如果他已经在第一个片段中,则应退出应用程序。

Here is my code: 这是我的代码:

@Override
public void onNavigationDrawerItemSelected(int position) {
    // update the main content by replacing fragments
    fragmentManager = getFragmentManager();
    Fragment fragment;
    switch (position){
        case 0:
            fragment = TrackerFragment.newInstance(position);
            break;

        case 1:
            fragment = CalendarViewFragment.newInstance(position);
            break;
        case 2:
            fragment = SettingsFragment.newInstance(position);

            break;
        default:
            fragment = TrackerFragment.newInstance(position);
    }

    fragmentManager.beginTransaction()
            .replace(R.id.container, fragment).addToBackStack(null)
            .commit();

}

I am not sure how to handle this scenario on OnBackPressed method.What logic should i make. 我不确定如何在OnBackPressed方法上处理这种情况。我应该做出什么逻辑。 Is there any method to do this without adding to back stack? 有什么方法可以做到这一点而无需添加到堆栈中? Any help is really appreciated! 任何帮助都非常感谢! Thanks1 Thanks1

private int mCurrentFragmentPosition;
 @Override
public void onNavigationDrawerItemSelected(int position) {

    // update the main content by replacing fragments

    mCurrentFragmentPosition = position;
    fragmentManager = getFragmentManager();
    Fragment fragment;
    switch (position){
        case 0:
            fragment = TrackerFragment.newInstance(position);
            break;

        case 1:
            fragment = CalendarViewFragment.newInstance(position);
            break;
        case 2:
            fragment = SettingsFragment.newInstance(position);

            break;
        default:
            fragment = TrackerFragment.newInstance(position);
    }

    fragmentManager.beginTransaction()
            .replace(R.id.container, fragment)
            .commit();

}
@Override
public void onBackPressed() {
    if(mCurrentFragmentPosition != 0){
        onNavigationDrawerItemSelected(0);
    }
    else {
        finish();
    }
}

Just keep a track of which is the current shown fragment and override the onBackPressed an act accordingly. 只需跟踪当前显示的片段,然后相应地覆盖onBackPressed一个动作即可。 Don't need to complicate your life with the backstack :) 不需要让backstack复杂化您的生活:)

int currentFragmentPosition = 0;

@Override
public void onNavigationDrawerItemSelected(int position) {
    // update the main content by replacing fragments
    if(postion == currentFragmentPosition)
    {
       return;
    }
    currentFragmentPosition = position;
    fragmentManager = getFragmentManager();
    Fragment fragment;
    switch (position){
        case 0:
            fragment = TrackerFragment.newInstance(position);
            break;

        case 1:
            fragment = CalendarViewFragment.newInstance(position);
            break;
        case 2:
            fragment = SettingsFragment.newInstance(position);

            break;
        default:
            fragment = TrackerFragment.newInstance(position);
    }

    fragmentManager.beginTransaction()
            .replace(R.id.container, fragment).addToBackStack(null)
            .commit();
}

@Override
public void onBackPressed() {
   if(currentFragmentPostion != 0){
      onNavigationDrawerItemSelected(0);
    }
    else {
      finish();
    }
}

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM