#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>