2015-07-21 69 views
0


我有一種情況,當我使用ViewPager作爲片段時,NavigationDrawer不會彈出,當我單擊其中一個NavigationDrawer項目時,它就會啓動。我正在使用材質設計, NavigationDrawer和ViewPager都是碎片。我的代碼是爲B當我使用ViewPager作爲片段時導航抽屜不會打開

package com.andr.viewpager; 

import android.app.Activity; 
import android.os.Bundle; 
import android.support.v4.app.Fragment; 
import android.support.v4.app.FragmentManager; 
import android.support.v4.app.FragmentStatePagerAdapter; 
import android.support.v4.view.PagerAdapter; 
import android.support.v4.view.ViewPager; 
import android.support.v4.widget.DrawerLayout; 
import android.support.v7.widget.Toolbar; 
import android.view.LayoutInflater; 
import android.view.MenuItem; 
import android.view.View; 
import android.view.ViewGroup; 
import android.widget.Toast; 

import com.andr.navdrawerdemo.FragmentDrawer; 
import com.andr.navdrawerdemo.FriendsFragment; 
import com.andr.navdrawerdemo.HomeFragment; 
import com.andr.navdrawerdemo.MessagesFragment; 
import com.andr.navdrawerdemo.R; 

public class ViewPagerFagment extends Fragment{ 
    private ViewPager mPager; 
    private View view; 
    private PagerAdapter mPagerAdapter; 
    private static final int NUM_PAGES = 3; 

    @Override 
    public View onCreateView(LayoutInflater inflater, ViewGroup container, 
      Bundle savedInstanceState) { 
     view = inflater.inflate(R.layout.activity_screen_slide, container, false); 
     mPager = (ViewPager)view.findViewById(R.id.pager); 
     mPager.setPageTransformer(true, new DepthPageTransformer()); 
     mPagerAdapter = new ScreenSlidePagerAdapter(getActivity().getSupportFragmentManager()); 
     mPager.setAdapter(mPagerAdapter); 
     return view; 
    } 


    /** 
     * A simple pager adapter that represents 5 ScreenSlidePageFragment objects, in 
     * sequence. 
     */ 
     private class ScreenSlidePagerAdapter extends FragmentStatePagerAdapter { 
      public ScreenSlidePagerAdapter(FragmentManager fm) { 
       super(fm); 
      } 

      @Override 
      public Fragment getItem(int position) { 
       switch(position) { 

       case 0: return new MessagesFragment(); 
       case 1: return new HomeFragment(); 
       case 2: return new FriendsFragment(); 
       default: return new FriendsFragment(); 
       } 
      } 

      @Override 
      public int getCount() { 
       return NUM_PAGES; 
      } 
     } 

     @Override 
     public void onAttach(Activity activity) { 
      super.onAttach(activity); 
     } 

     @Override 
     public void onDetach() { 
      super.onDetach(); 
     } 

     @Override 
     public void onResume() { 
      super.onResume(); 
     } 


} 


NavigationDrawer片段:

package com.andr.navdrawerdemo; 


import android.content.Context; 
import android.os.Bundle; 
import android.support.v4.app.Fragment; 
import android.support.v4.widget.DrawerLayout; 
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.LayoutInflater; 
import android.view.MotionEvent; 
import android.view.View; 
import android.view.ViewGroup; 

import java.util.ArrayList; 
import java.util.List; 

import com.andr.adapter.NavigationDrawerAdapter; 
import com.andr.model.NavDrawerItem; 
import com.andr.navdrawerdemo.R; 



public class FragmentDrawer extends Fragment { 

    private static String TAG = FragmentDrawer.class.getSimpleName(); 

    private RecyclerView recyclerView; 
    private ActionBarDrawerToggle mDrawerToggle; 
    private DrawerLayout mDrawerLayout; 
    private com.andr.adapter.NavigationDrawerAdapter adapter; 
    private View containerView; 
    private static String[] titles = null; 
    private FragmentDrawerListener drawerListener; 

    public FragmentDrawer() { 

    } 

    public void setDrawerListener(FragmentDrawerListener listener) { 
     this.drawerListener = listener; 
    } 

    public static List<NavDrawerItem> getData() { 
     List<NavDrawerItem> data = new ArrayList<>(); 


     // preparing navigation drawer items 
     for (int i = 0; i < titles.length; i++) { 
      NavDrawerItem navItem = new NavDrawerItem(); 
      navItem.setTitle(titles[i]); 
      data.add(navItem); 
     } 
     return data; 
    } 

    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 

     // drawer labels 
     titles = getActivity().getResources().getStringArray(R.array.nav_drawer_labels); 
    } 

    @Override 
    public View onCreateView(LayoutInflater inflater, ViewGroup container, 
          Bundle savedInstanceState) { 
     // Inflating view layout 
     View layout = inflater.inflate(R.layout.fragment_navigation_drawer, container, false); 
     recyclerView = (RecyclerView) layout.findViewById(R.id.drawerList); 

     adapter = new NavigationDrawerAdapter(getActivity(), getData()); 
     recyclerView.setAdapter(adapter); 
     recyclerView.setLayoutManager(new LinearLayoutManager(getActivity())); 
     recyclerView.addOnItemTouchListener(new RecyclerTouchListener(getActivity(), recyclerView, new ClickListener() { 
      @Override 
      public void onClick(View view, int position) { 
       drawerListener.onDrawerItemSelected(view, position); 
       mDrawerLayout.closeDrawer(containerView); 
      } 

      @Override 
      public void onLongClick(View view, int position) { 

      } 
     })); 

     return layout; 
    } 


    public void setUp(int fragmentId, DrawerLayout drawerLayout, final Toolbar toolbar) { 
     containerView = getActivity().findViewById(fragmentId); 
     mDrawerLayout = drawerLayout; 
     mDrawerToggle = new ActionBarDrawerToggle(getActivity(), drawerLayout, toolbar, R.string.drawer_open, R.string.drawer_close) { 
      @Override 
      public void onDrawerOpened(View drawerView) { 
       super.onDrawerOpened(drawerView); 
       getActivity().invalidateOptionsMenu(); 
      } 

      @Override 
      public void onDrawerClosed(View drawerView) { 
       super.onDrawerClosed(drawerView); 
       getActivity().invalidateOptionsMenu(); 
      } 

      @Override 
      public void onDrawerSlide(View drawerView, float slideOffset) { 
       super.onDrawerSlide(drawerView, slideOffset); 
       toolbar.setAlpha(1 - slideOffset/2); 
      } 
     }; 

     mDrawerLayout.setDrawerListener(mDrawerToggle); 
     mDrawerLayout.post(new Runnable() { 
      @Override 
      public void run() { 
       mDrawerToggle.syncState(); 
      } 
     }); 

    } 

    public static interface ClickListener { 
     public void onClick(View view, int position); 

     public void onLongClick(View view, int position); 
    } 

    static class RecyclerTouchListener implements RecyclerView.OnItemTouchListener { 

     private GestureDetector gestureDetector; 
     private ClickListener clickListener; 

     public RecyclerTouchListener(Context context, final RecyclerView recyclerView, final ClickListener clickListener) { 
      this.clickListener = clickListener; 
      gestureDetector = new GestureDetector(context, new GestureDetector.SimpleOnGestureListener() { 
       @Override 
       public boolean onSingleTapUp(MotionEvent e) { 
        return true; 
       } 

       @Override 
       public void onLongPress(MotionEvent e) { 
        View child = recyclerView.findChildViewUnder(e.getX(), e.getY()); 
        if (child != null && clickListener != null) { 
         clickListener.onLongClick(child, recyclerView.getChildPosition(child)); 
        } 
       } 
      }); 
     } 

     @Override 
     public boolean onInterceptTouchEvent(RecyclerView rv, MotionEvent e) { 

      View child = rv.findChildViewUnder(e.getX(), e.getY()); 
      if (child != null && clickListener != null && gestureDetector.onTouchEvent(e)) { 
       clickListener.onClick(child, rv.getChildPosition(child)); 
      } 
      return false; 
     } 

     @Override 
     public void onTouchEvent(RecyclerView rv, MotionEvent e) { 
     } 
    } 

    public interface FragmentDrawerListener { 
     public void onDrawerItemSelected(View view, int position); 
    } 
} 


我個人片段:

package com.andr.navdrawerdemo; 

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

import com.andr.navdrawerdemo.R; 


public class FriendsFragment extends Fragment { 


    public FriendsFragment() { 
     // Required empty public constructor 
    } 

    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 

    } 

    @Override 
    public View onCreateView(LayoutInflater inflater, ViewGroup container, 
          Bundle savedInstanceState) { 
     // Inflate the layout for this fragment 
     return inflater.inflate(R.layout.fragment_friends, container, false); 
    } 
} 


package com.andr.navdrawerdemo; 


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

import com.andr.navdrawerdemo.R; 


public class HomeFragment extends Fragment { 

    public HomeFragment() { 
     // Required empty public constructor 
    } 

    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 

    } 

    @Override 
    public View onCreateView(LayoutInflater inflater, ViewGroup container, 
          Bundle savedInstanceState) { 
     View rootView = inflater.inflate(R.layout.fragment_home, container, false); 


     // Inflate the layout for this fragment 
     return rootView; 
    } 

    @Override 
    public void onAttach(Activity activity) { 
     super.onAttach(activity); 
    } 

    @Override 
    public void onDetach() { 
     super.onDetach(); 
    } 
} 


package com.andr.navdrawerdemo; 

import android.app.Activity; 
import android.os.Bundle; 
import android.support.v4.app.Fragment; 
import android.view.LayoutInflater; 
import android.view.MenuItem; 
import android.view.View; 
import android.view.ViewGroup; 
import android.widget.Toast; 

import com.andr.navdrawerdemo.R; 


public class MessagesFragment extends Fragment { 


    public MessagesFragment() { 
     // Required empty public constructor 
    } 

    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 

    } 

    @Override 
    public View onCreateView(LayoutInflater inflater, ViewGroup container, 
          Bundle savedInstanceState) { 
     // Inflate the layout for this fragment 
     return inflater.inflate(R.layout.fragment_messages, container, false); 
    } 

    @Override 
    public void onAttach(Activity activity) { 
     // TODO Auto-generated method stub 
     super.onAttach(activity); 
    } 

    @Override 
    public void onResume() { 
     // TODO Auto-generated method stub 
     super.onResume(); 
    } 
} 


我mainActivity

package com.andr.navdrawerdemo; 


import android.os.Bundle; 
import android.support.v4.app.Fragment; 
import android.support.v4.app.FragmentManager; 
import android.support.v4.app.FragmentTransaction; 
import android.support.v4.widget.DrawerLayout; 
import android.support.v7.app.ActionBarActivity; 
import android.support.v7.app.AppCompatActivity; 
import android.support.v7.widget.Toolbar; 
import android.view.Menu; 
import android.view.MenuItem; 
import android.view.View; 
import android.widget.Toast; 

import com.andr.navdrawerdemo.R; 
import com.andr.viewpager.ViewPagerFagment; 

//http://www.androidhive.info/2015/04/android-getting-started-with-material-design/ 
public class MainActivity extends AppCompatActivity implements FragmentDrawer.FragmentDrawerListener { 

    private static String TAG = MainActivity.class.getSimpleName(); 

    private Toolbar mToolbar; 
    private FragmentDrawer drawerFragment; 

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

     /* mToolbar = (Toolbar) findViewById(R.id.toolbar); 

     setSupportActionBar(mToolbar); 
     getSupportActionBar().setDisplayShowHomeEnabled(true); 

     drawerFragment = (FragmentDrawer) 
       getSupportFragmentManager().findFragmentById(R.id.fragment_navigation_drawer); 
     drawerFragment.setUp(R.id.fragment_navigation_drawer, (DrawerLayout) findViewById(R.id.drawer_layout), mToolbar); 
     drawerFragment.setDrawerListener(this); 

     // display the first navigation drawer view on app launch 
     displayView(0);*/ 

     initializeSlidingMenu(); 
    } 

    public void initializeSlidingMenu(){ 
      mToolbar = (Toolbar) findViewById(R.id.toolbar); 

      setSupportActionBar(mToolbar); 
      getSupportActionBar().setDisplayShowHomeEnabled(true); 

      drawerFragment = (FragmentDrawer) 
        getSupportFragmentManager().findFragmentById(R.id.fragment_navigation_drawer); 
      drawerFragment.setUp(R.id.fragment_navigation_drawer, (DrawerLayout) findViewById(R.id.drawer_layout), mToolbar); 
      drawerFragment.setDrawerListener(this); 

      // display the first navigation drawer view on app launch 
      displayView(0); 
    } 

    @Override 
    public boolean onCreateOptionsMenu(Menu menu) { 
     // Inflate the menu; this adds items to the action bar if it is present. 
     getMenuInflater().inflate(R.menu.main, menu); 
     return true; 
    } 

    @Override 
    public boolean onOptionsItemSelected(MenuItem item) { 
     // Handle action bar item clicks here. The action bar will 
     // automatically handle clicks on the Home/Up button, so long 
     // as you specify a parent activity in AndroidManifest.xml. 
     int id = item.getItemId(); 

     //noinspection SimplifiableIfStatement 
     if (id == R.id.action_settings) { 
      return true; 
     } 

     if(id == R.id.action_search){ 
      Toast.makeText(getApplicationContext(), "Search action is selected!", Toast.LENGTH_SHORT).show(); 
      return true; 
     } 

     return super.onOptionsItemSelected(item); 
    } 

    @Override 
    public void onDrawerItemSelected(View view, int position) { 
      displayView(position); 
    } 

    private void displayView(int position) { 
     Fragment fragment = null; 
     String title = getString(R.string.app_name); 
     switch (position) { 
      case 0: 
       fragment = new HomeFragment(); 
       title = getString(R.string.title_home); 
       break; 
      case 1: 
       fragment = new FriendsFragment(); 
       title = getString(R.string.title_friends); 
       break; 
      case 2: 
       fragment = new MessagesFragment(); 
       title = getString(R.string.title_messages); 
       break; 
      case 3: 
       fragment = new ViewPagerFagment(); 
       title = getString(R.string.title_slider); 
       break; 
      default: 
       break; 
     } 

     if (fragment != null) { 
      FragmentManager fragmentManager = getSupportFragmentManager(); 
      FragmentTransaction fragmentTransaction = fragmentManager.beginTransaction(); 
      fragmentTransaction.replace(R.id.container_body, fragment); 
      fragmentTransaction.commit(); 

      // set the toolbar title 
      getSupportActionBar().setTitle(title); 
     } 
    } 
} 


//我的佈局

<android.support.v4.widget.DrawerLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    xmlns:app="http://schemas.android.com/apk/res-auto" 
    xmlns:tools="http://schemas.android.com/tools" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    android:id="@+id/drawer_layout" 
    tools:context="com.andr.navdrawerdemo.MainActivity" > 

    <LinearLayout 
     android:layout_width="fill_parent" 
     android:layout_height="wrap_content" 
     android:layout_alignParentTop="true" 
     android:orientation="vertical"> 

     <include 
      android:id="@+id/toolbar" 
      layout="@layout/toolbar" /> 
    </LinearLayout> 

    <FrameLayout 
      android:id="@+id/container_body" 
      android:layout_width="fill_parent" 
      android:layout_height="0dp" 
      android:layout_weight="1" /> 

    <fragment 
     android:id="@+id/fragment_navigation_drawer" 
     android:name="com.andr.navdrawerdemo.FragmentDrawer" 
     android:layout_width="@dimen/nav_drawer_width" 
     android:layout_height="match_parent" 
     android:layout_gravity="start" 
     app:layout="@layout/fragment_navigation_drawer" 
     tools:layout="@layout/fragment_navigation_drawer" /> 

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


Viewpager佈局

<android.support.v4.view.ViewPager 
    xmlns:android="http://schemas.android.com/apk/res/android" 
    android:id="@+id/pager" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" /> 

誰能幫助我Ÿ我slidingmenu在ViewPAger片段

不彈出

回答

0

我相信ViewPager應該在主佈局中。我仍然使這項工作100%的努力,但這樣做的:

<android.support.v4.widget.DrawerLayout 
xmlns:android="http://schemas.android.com/apk/res/android" 
xmlns:tools="http://schemas.android.com/tools" 
android:id="@+id/drawer_layout" 
android:layout_width="match_parent" android:layout_height="match_parent" 
tools:context="thehighestprimenumber.com.losprincipios.ChapterActivity"> 


<android.support.v4.view.ViewPager 
    android:id="@+id/pager" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" > 

    <FrameLayout android:id="@+id/containerBox" android:layout_width="match_parent" 
     android:layout_height="match_parent" /> 
</android.support.v4.view.ViewPager> 

<ListView android:id="@+id/drawer" 
    ... 
    /> 

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

這樣的navigationDrawer打開。

我的問題是,當我點擊導航抽屜上的一個項目時,片段不會更新。

,如果你知道如何解決這個問題,你會成爲我的一天=)