С помощью DrawerLayout как я могу закрыть приложение при нажатии назад, независимо от того, какой экран активен?

#java #android

#java #Android

Вопрос:

Я использую DrawerLayout для навигации по моему приложению:

Берем это меню для примера:

введите описание изображения здесь

Я бы хотел, чтобы кнопка Home запускала HomeActivity и так далее. Но очистка стека действий, то есть: если я нажимаю людей, затем фотографии, затем местоположения, а затем кнопку «Назад», приложение должно закрыться. Я пытаюсь использовать флаги намерений при запуске действий, но я всегда получаю одно и то же поведение: Люди-> Фотографии-> Местоположение-> Назад переходит к фотографиям вместо закрытия приложения

Как я могу этого добиться?

Комментарии:

1. Я думаю, вам следует рассмотреть возможность использования Fragment для дома, людей, фотографий, местоположения и т. Д. Затем на обратной стороне нажмите очистить стек фрагментов и завершить действие.

Ответ №1:

Согласно вашим словам, «если я нажимаю людей, затем фотографии, затем местоположения, а затем кнопку «Назад», приложение должно закрыться».

Для достижения этого вам необходимо фрагментировать пользователя для дома, людей, местоположения, Фотографий и т. Д., А когда вы нажимаете кнопку «Назад» устройства, вы можете очистить стек возврата фрагмента и завершить действие.

Комментарии:

1. Да, но из-за схемы действий они должны быть в разных действиях

2. Вы хотите сказать, что у вас есть реализация DrawerLayout в вашей BaseActivity, которая используется для отображения людей, фотографий, местоположения.

3. Я думаю, что в вашем случае, поскольку у вас есть use Activity для всего вашего меню в DrawLayout, вы должны объявить свою домашнюю активность как singleTask, и когда пользователь нажимает «Назад» из Location can Home Activity очистит FLAG_ACTIVITY_CLEAR_TOP и завершит домашнюю активность из метода onNewIntent.

Ответ №2:

Я думаю, что этот код может вам помочь. Когда вы нажимаете кнопку «Назад» устройства, оно закрывает приложение.

В MainActivity.java,

 public void SelectItem(int possition) 
{

            //Using Fragment here
    Fragment fragment = null;
    Bundle args = new Bundle();
    switch (possition) 
    {

           //Can use Fragment for Home,People,Location and Photos etc. and when you press back button of Device you can clear Fragment back stack and finish activity.
             case 0:
        fragment=new FragmentNewsFeed();
                    break;

             case 1:
        fragment = new FragmentMessages();
        break;

            default:
        break;
    }

    fragment.setArguments(args);
    FragmentManager frgManager = getFragmentManager();
    frgManager.beginTransaction().replace(R.id.content_frame, fragment).commit();

    listView_drawer.setItemChecked(possition, true);
    setTitle(dataList.get(possition).getItemName());
    drawerLayout.closeDrawer(listView_drawer);

}
 

В классе FragmentNewsFeed,

 public class FragmentNewsFeed extends Fragment 
{


   public FragmentNewsFeed()
   {

   }
  
   @Override
   public View onCreateView(LayoutInflater inflater, ViewGroup container,Bundle savedInstanceState) 
   {
      View view = inflater.inflate(R.layout.fragment_news_feeds, container,false);
      return view;
   }
       }
 

Принимая во внимание, что вы можете найти фрейм содержимого в layout/activity_main.xml,

 <android.support.v4.widget.DrawerLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@ id/drawer_layout"
android:layout_width="match_parent"
android:layout_height="match_parent">

<!-- Framelayout to display Fragments -->
<FrameLayout
    android:id="@ id/content_frame"
    android:layout_width="match_parent"
    android:layout_height="match_parent" />

<!-- Listview to display slider menu -->

<ListView
    android:id="@ id/left_drawer"
    android:layout_width="240dp"
    android:layout_height="match_parent"
    android:layout_gravity="start"
    android:choiceMode="singleChoice"
    android:divider="@android:color/transparent"
    android:dividerHeight="0dp"
    android:background="#ffff"/>
    </android.support.v4.widget.DrawerLayout>
 

В R.layout.fragment_news_feeds,

 <?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@ id/linear_Parent"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="#008B8B"
android:orientation="vertical" >

<LinearLayout
    android:id="@ id/linear_1"
    android:layout_width="80dp"
    android:layout_height="wrap_content"
    android:layout_marginLeft="15dp"
    android:layout_weight="0.30"
    android:background="#2F4F4F"
    android:orientation="vertical" >

    <ListView
        android:id="@ id/listView_OwnItems"
        android:layout_width="match_parent"
        android:layout_height="wrap_content" >
    </ListView>
</LinearLayout>
</LinearLayout>