アクティビティが開始されたときに、このリストの最初のアイテムがクリックされたときに、たとえばMainFragmentが左側にスクロールされたときに、新しいフラグメント(OptionOneFragment)が画面の右側からスクロールします。 OptionsフラグメントにはMainFragmentに戻るボタンがあり、Mainオプションに関連する「サブオプション」のリストがあり、クリックすると他のアクティビティが開きます。Androidでフラグメントを含むメニューを作成する
断片の関係は次のようである:
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
私が今持っていることである:これは私のactivity_mainレイアウト
<?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>
は
これは私のfragment_mainレイアウトされている
<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>
私の "fragment_option_one"レイアウト。他の2されているとまったく同じ
<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>
私のコードは次のとおりです。MainActivityで
私はMainFragment
@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();
}
のイニシエータを持っていると私MainFragmentに、私はレイアウトを変更する関数を呼び出しますクリックしたアイテムによって異なります(アイテム0のみ、もう1つはまだ作成していません)。
@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;
}
そしてOptionOneFragmentに、私は、ほぼ同じことがあります。フラグメントは変更
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;
}
そして、私の関数Shared.ShowFragmentを(アニメーションは正常に動作します):
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();
}
私は、この種のを見てきました私が以前に欲しいメニューですが、私が開発しようとしたときに、アプリケーションが何らかの理由でクラッシュしたような、いくつかの問題に直面しました。例を挙げて説明してみましょう...