在Android中创建一个包含片段的菜单
我想要一个菜单,当活动开始时,显示一个带有选项列表的片段(MainFragment),例如,当单击此列表中的第一项时,MainFragment将滚动到屏幕的左侧,而新片段(OptionOneFragment)将从屏幕的右侧滚动。在选项片段中,顶部有一个按钮返回主片段,另一个与主选项菜单相关的“子选项”列表,单击任何选项都将打开其他活动 碎片之间的关系如下所示:在Android中创建一个包含片段的菜单,android,android-layout,android-fragments,Android,Android Layout,Android Fragments,我想要一个菜单,当活动开始时,显示一个带有选项列表的片段(MainFragment),例如,当单击此列表中的第一项时,MainFragment将滚动到屏幕的左侧,而新片段(OptionOneFragment)将从屏幕的右侧滚动。在选项片段中,顶部有一个按钮返回主片段,另一个与主选项菜单相关的“子选项”列表,单击任何选项都将打开其他活动 碎片之间的关系如下所示: MainFragment ListView Option1 - Slide out Main and Slid
MainFragment
ListView
Option1 - Slide out Main and Slide in
-OptionOneFragment
<- BackButton (With a Slide Out)
ListView
Option1_1 = opens ActivityA
Option1_2 = opens ActivityB
Option2 - Slide out Main and Slide in
-OptionTwoFragment (With a Slide Out)
<- BackButton
ListView
Option2_1 = opens ActivityC
Option2_2 = opens ActivityD
Option3 - Slide out Main and Slide in
-OptionThreeFragment (With a Slide Out)
<- BackButton
ListView
Option3_1 = opens ActivityE
Option3_2 = opens ActivityF
在我的MainFragment中,我调用了一个函数,该函数根据单击的项目更改布局(仅在项目0中,其他2个我还没有创建):
我以前见过这种我想要的菜单,但是当我尝试开发一个菜单时,我遇到了一些问题,比如如果应用程序因为任何原因崩溃,它就会破坏我所有的布局。我会用例子更好地解释…您是否考虑过使用库来帮助您创建菜单?我试过Mike Penz的材料抽屉库,它非常适合快速设置菜单 有很多不同的预设风格,你可以选择,所以我相信你可以找到你喜欢的外观
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".app.Activities.MainActivity">
<FrameLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
android:padding="@dimen/activity_vertical_margin"
android:id="@+id/fragmentContainer"
android:layout_below="@id/toolbarMain">
</FrameLayout>
</RelativeLayout>
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".app.Activities.MainActivity"
android:background="@color/zxing_transparent">
<ListView
android:layout_width="match_parent"
android:layout_height="match_parent"
android:id="@+id/listViewMainMenu"
android:background="#FFF"
/>
</FrameLayout>
<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".app.Activities.MainActivity"
android:orientation="vertical"
android:background="@color/zxing_transparent">
<ImageView
android:layout_width="@dimen/back_button_dimen_width"
android:layout_height="@dimen/back_button_dimen_height"
android:id="@+id/buttomBackToMainMenu"
android:src="@drawable/ic_keyboard_backspace"
/>
<ListView
android:layout_width="match_parent"
android:layout_height="match_parent"
android:id="@+id/listViewSubMenu"
android:background="#FFF"
/>
</LinearLayout>
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
Fragment mainFragment = new MainFragment();
FragmentTransaction transaction = getSupportFragmentManager().beginTransaction();
transaction.add(R.id.fragmentContainer, mainFragment, "MAIN_FRAGMENT");
transaction.addToBackStack(null);
transaction.commit();
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
// Inflate the layout for this fragment
view = inflater.inflate(R.layout.fragment_main, container, false);
thisFragment = this;
manager= this.getFragmentManager();
listViewMainMenu =(ListView) view.findViewById(R.id.listViewMainMenu);
menuList = new ArrayList<>();
menuList.clear();
menuList.add(0, "OptionOne");
menuList.add(1, "OptionTwo");
menuList.add(2, "OptionThree");
menuAdapter = new MainMenuAdapter(getActivity(), menuList);
listViewMainMenu.setAdapter(menuAdapter);
listViewMainMenu.setOnItemClickListener(new AdapterView.OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
switch (position){
case(0):
Shared.ShowFragment(manager, thisFragment, new OptionOneFragment(), 1);
break;
default:
break;
}
}
});
return view;
}
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
View view = inflater.inflate(R.layout.fragment_option_one, container, false);
thisFragment = this;
manager = this.getFragmentManager();
buttomBackToMenu = (ImageView) view.findViewById(R.id.buttomBackToMenu);
listViewSubMenu = (ListView) view.findViewById(R.id.listViewSubMenu);
menuList = new ArrayList<>();
menuList.add(0,"Option1_1");
menuList.add(1,"Option1_2");
menuAdapter = new MainMenuAdapter(getActivity(),menuList);
listViewSubMenu.setAdapter(menuAdapter);
buttomBackToMenu.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Shared.ShowFragment(manager, thisFragment, new MainFragment(), 0);
}
});
listViewSubMenu.setOnItemClickListener(new AdapterView.OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
switch (position){
case (0):
intent= new Intent(getActivity(), ActivityA.class);
break;
case (1):
intent = null;
break;
}
if(intent!= null)
getActivity().startActivity(intent);
}
});
return view;
}
public static void ShowFragment(FragmentManager manager, Fragment thisFragment, Fragment destinyFragment, int customTransactionType) {
FragmentTransaction transaction = manager.beginTransaction();
switch(customTransactionType){
case (0):
transaction.setCustomAnimations(R.anim.slide_out_left, R.anim.slide_in_right);
break;
case (1):
transaction.setCustomAnimations(R.anim.slide_in_left, R.anim.slide_out_right);
break;
default: break;
}
transaction.remove(thisFragment);
transaction.add(R.id.fragmentContainer, destinyFragment);
transaction.commit();
}