2017-01-18 14 views
1

アクティビティが開始されたときに、このリストの最初のアイテムがクリックされたときに、たとえば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(); 
    } 

私は、この種のを見てきました私が以前に欲しいメニューですが、私が開発しようとしたときに、アプリケーションが何らかの理由でクラッシュしたような、いくつかの問題に直面しました。例を挙げて説明してみましょう...

答えて

0

メニューを作成するためにライブラリを使用することを考えたことはありますか?私はMike PenzのMaterial Drawerライブラリを試してみました。メニューをすばやく設定するのには本当に便利です。

あなたが選ぶことができるたくさんの異なるプリセットスタイルがありますので、私はあなたが見た目が好きなものを見つけることができると確信しています。

https://github.com/mikepenz/MaterialDrawer

関連する問題