2017-07-06 72 views
0

我想使用RecyclerView創建導航抽屜並使用片段。導航抽屜上的菜單使用RecyclerView,當點擊菜單時,切換到選定的片段。Android片段未顯示使用recyclerview

我有一個問題,當我點擊菜單但片段沒有改變

低於

是我MainActivity.java

package com.ayotong.miranda; 


import android.content.Intent; 
import android.support.v4.app.Fragment; 
import android.support.v4.app.FragmentTransaction; 
import android.support.v4.widget.DrawerLayout; 
import android.support.v7.app.ActionBarActivity; 
import android.os.Bundle; 
import android.support.v7.app.ActionBarDrawerToggle; 
import android.support.v7.widget.LinearLayoutManager; 
import android.support.v7.widget.RecyclerView; 
import android.support.v7.widget.Toolbar; 
import android.view.GestureDetector; 
import android.view.Menu; 
import android.view.MenuItem; 
import android.view.MotionEvent; 
import android.view.View; 
import android.widget.Toast; 


public class MainActivity extends ActionBarActivity { 

    //First We Declare Titles And Icons For Our Navigation Drawer List View 
    //This Icons And Titles Are holded in an Array as you can see 

    String TITLES[] = {"Home","Events","Mail","Shop"}; 
    int ICONS[] = {R.drawable.ic_home,R.drawable.ic_article,R.drawable.ic_stat,R.drawable.ic_about}; 

    //Similarly we Create a String Resource for the name and email in the header view 
    //And we also create a int resource for profile picture in the header view 

    String NAME = "Akash Bangad"; 
    String COND = "Healthy"; 
    int PROFILE = R.drawable.teh; 
    int lastMenu = -1; 

    private Toolbar toolbar;        // Declaring the Toolbar Object 

    RecyclerView mRecyclerView;       // Declaring RecyclerView 
    RecyclerView.Adapter mAdapter;      // Declaring Adapter For Recycler View 
    RecyclerView.LayoutManager mLayoutManager;   // Declaring Layout Manager as a linear layout manager 
    DrawerLayout Drawer;         // Declaring DrawerLayout 

    ActionBarDrawerToggle mDrawerToggle;     // Declaring Action Bar Drawer Toggle 




    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.main_activity); 

    /* Assinging the toolbar object ot the view 
    and setting the the Action bar to our toolbar 
    */ 
     toolbar = (Toolbar) findViewById(R.id.tool_bar); 
     setSupportActionBar(toolbar); 
     getSupportActionBar().setTitle(null); 




     mRecyclerView = (RecyclerView) findViewById(R.id.RecyclerView); // Assigning the RecyclerView Object to the xml View 

     mRecyclerView.setHasFixedSize(true);       // Letting the system know that the list objects are of fixed size 

     mAdapter = new MyAdapter(TITLES,ICONS,NAME,COND,PROFILE, this);  

     mRecyclerView.setAdapter(mAdapter);        // Setting the adapter to RecyclerView 

     final GestureDetector mGestureDetector = new GestureDetector(MainActivity.this, new GestureDetector.SimpleOnGestureListener() { 

      @Override public boolean onSingleTapUp(MotionEvent e) { 
       return true; 
      } 

     }); 

     mRecyclerView.addOnItemTouchListener(new RecyclerView.OnItemTouchListener() { 
      @Override 
      public boolean onInterceptTouchEvent(RecyclerView recyclerView, MotionEvent motionEvent) { 
       View child = recyclerView.findChildViewUnder(motionEvent.getX(),motionEvent.getY()); 

       if(child != null && mGestureDetector.onTouchEvent(motionEvent)){ 
        Drawer.closeDrawers(); 
//     Toast.makeText(MainActivity.this, "The Item Clicked is: " + recyclerView.getChildPosition(child), Toast.LENGTH_SHORT).show(); 

        onTouchDrawer(recyclerView.getChildPosition(child)); 

        return true; 

       } 

       return false; 
      } 

      @Override 
      public void onTouchEvent(RecyclerView recyclerView, MotionEvent motionEvent) { 

      } 
      @Override 
      public void onRequestDisallowInterceptTouchEvent(boolean disallowIntercept) { 
      } 
     }); 


     mLayoutManager = new LinearLayoutManager(this);     // Creating a layout Manager 

     mRecyclerView.setLayoutManager(mLayoutManager);     // Setting the layout Manager 


     Drawer = (DrawerLayout) findViewById(R.id.DrawerLayout);  // Drawer object Assigned to the view 
     mDrawerToggle = new ActionBarDrawerToggle(this,Drawer,toolbar,R.string.openDrawer,R.string.closeDrawer){ 

      @Override 
      public void onDrawerOpened(View drawerView) { 
       super.onDrawerOpened(drawerView); 
       // code here will execute once the drawer is opened(As I dont want anything happened whe drawer is 
       // open I am not going to put anything here) 
      } 

      @Override 
      public void onDrawerClosed(View drawerView) { 
       super.onDrawerClosed(drawerView); 
       // Code here will execute once drawer is closed 
      } 



     }; // Drawer Toggle Object Made 
     Drawer.setDrawerListener(mDrawerToggle); // Drawer Listener set to the Drawer toggle 
     mDrawerToggle.syncState();    // Finally we set the drawer toggle sync State 

    } 

    private void openFragment(final Fragment fragment) { 
     android.support.v4.app.FragmentManager fm = getSupportFragmentManager(); 
     android.support.v4.app.FragmentTransaction ft = fm.beginTransaction(); 
     ft.replace(R.id.container,fragment); 
     ft.commit(); 
    } 

    public void onTouchDrawer(final int position) { 

     if (lastMenu == position) return; 

     switch (lastMenu = position) { 
      case 1: 
       openFragment(new Home_fragment()); 
       break; 
      case 2: 
       openFragment(new Stat_fragment()); 
       break; 
      default: 
       return; 
     } 
    } 

} 
下面

是Main_activity.xml

<?xml version="1.0" encoding="utf-8"?> 

<android.support.v4.widget.DrawerLayout 

    xmlns:android="http://schemas.android.com/apk/res/android" 
    xmlns:app="http://schemas.android.com/apk/res-auto" 
    android:id="@+id/DrawerLayout" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    android:elevation="7dp"> 

<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=".MainActivity"> 

    <include 
     android:id="@+id/tool_bar" 
     layout="@layout/tool_bar" 
     ></include> 
    <FrameLayout 
     android:id="@+id/container" 
     android:layout_width="match_parent" 
     android:layout_height="match_parent"> 

    </FrameLayout> 

</LinearLayout> 

    <android.support.v7.widget.RecyclerView 
     android:id="@+id/RecyclerView" 
     android:layout_width="230dp" 
     android:layout_height="match_parent" 
     android:layout_gravity="left" 

     android:background="#ffffff" 
     android:scrollbars="vertical"> 

    </android.support.v7.widget.RecyclerView> 


</android.support.v4.widget.DrawerLayout> 

下面是fragment_home.xml

<?xml version="1.0" encoding="utf-8"?> 
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:orientation="vertical" android:layout_width="match_parent" 
    android:layout_height="match_parent"> 

    <TextView 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:text="HOME MIRANDA" 
     android:padding="8dp" 
     android:textColor="#fff" 
     android:background="@color/colorPrimary" 
     android:textSize="28sp" 
     android:id="@+id/textView" 
     android:layout_centerVertical="true" 
     android:layout_centerHorizontal="true" /> 

    <!--<android.support.v7.widget.RecyclerView--> 
     <!--android:id="@+id/my_recycler_view"--> 
     <!--android:scrollbars="vertical"--> 
     <!--android:layout_width="match_parent"--> 
     <!--android:layout_height="match_parent"/>--> 

</RelativeLayout> 
下面

是fragment_home.java

package com.ayotong.miranda; 

import android.os.Bundle; 
import android.support.annotation.Nullable; 
import android.support.v4.app.Fragment; 
import android.view.LayoutInflater; 
import android.view.View; 
import android.view.ViewGroup; 

public class Home_fragment extends Fragment { 

    @Nullable 
    @Override 
    public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) { 
     //returning our layout file 
     //change R.layout.yourlayoutfilename for each of your fragments 
     return inflater.inflate(R.layout.fragment_home, container, false); 
    } 
} 

請幫我解決這個問題,所以我可以改變片段點擊導航抽屜菜單時。

回答

0

嘗試調用回收站視圖的onItemTouchListener中的openFragment()。在加載片段之前,嘗試關閉抽屜,然後調用openFragment()。我認爲它應該工作。同時檢查容器ID是否正確。

+0

不起作用... –