2017-07-06 1 views
0

Je souhaite créer un tiroir de navigation à l'aide de RecyclerView et utiliser fragment. Le menu du tiroir de navigation utilise RecyclerView et lorsque vous cliquez sur le menu, passez au fragment sélectionné.Le fragment Android ne s'affichait pas en utilisant recyclerview

J'ai un problème quand je clique sur un menu, mais fragment n'a pas changé

ci-dessous est mon 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; 
     } 
    } 

} 

ci-dessous est 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> 

ci-dessous 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> 

ci-dessous est 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); 
    } 
} 

S'il vous plaît me aider à résoudre ce donc je peux changer fragment lorsque le menu de navigation sur le tiroir est cliqué.

Répondre

0

Essayez d'appeler openFragment() dans le onItemTouchListener de la vue recycleur. Avant de charger le fragment, essayez de fermer le tiroir, puis appelez openFragment(). Je pense que ça devrait marcher. Vérifiez également si l'ID du conteneur est correcte.

+0

ne fonctionne pas ... –