2015-08-21 3 views
-2

У меня есть навигационный ящик в базовой деятельности, который распространяется на все другие виды деятельности. Для некоторых сценариев мне нужно скрыть навигационный ящик для некоторых экранов.Как скрыть меню ящика навигации?

Как я могу это достичь?

Drawerlistener

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 info.androidhive.materialdesign.R; 
import info.androidhive.materialdesign.adapter.NavigationDrawerAdapter; 
import info.androidhive.materialdesign.model.NavDrawerItem; 

public class FragmentDrawer extends Fragment { 

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

    private RecyclerView recyclerView; 
    private ActionBarDrawerToggle mDrawerToggle; 
    private DrawerLayout mDrawerLayout; 
    private 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) { 
     } 

     @Override 
     public void onRequestDisallowInterceptTouchEvent(boolean disallowIntercept) { 

     } 


    } 

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

BaseActivity

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(false); 
     final Drawable upArrow = getResources().getDrawable(R.drawable.abc_ic_ab_back_mtrl_am_alpha); 
     upArrow.setColorFilter(getResources().getColor(R.color.material_blue_grey_950), PorterDuff.Mode.SRC_ATOP); 
     getSupportActionBar().setHomeAsUpIndicator(upArrow); 
     if (getActionBar() != null) { 
      getActionBar().setDisplayHomeAsUpEnabled(false); 
      getActionBar().setHomeButtonEnabled(false); 
     } 
     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); 
    } 
} 

Пожалуйста, помогите!

enter image description here

+0

вниз избирателей, пожалуйста, говоря, что я здесь не так? – Boopathi

+0

Попробуйте это 'if (activity.getActionBar()! = Null) { activity.getActionBar(). SetDisplayHomeAsUpEnabled (false); activity.getActionBar(). SetHomeButtonEnabled (false); } ' – BNK

+0

Я не голосующий, но думаю, причина в том, что вопрос немного не ясен. Пожалуйста, покажите код; это поможет нам лучше понять вопрос и оказать дополнительную помощь. –

ответ

0

Добавьте эту строку в OnCreate():

getActionBar().setDisplayHomeAsUpEnabled(false); 
+0

попробовал ваш не работает – Boopathi

0

Вы можете добавить этот код, в котором вы не хотите, чтобы показать изображение кассеты

ActionBar ab = getSupportActionBar(); 
ab.setDisplayHomeAsUpEnabled(false); 

UPDATE: Ваш код должен быть примерно таким,

getSupportActionBar().setHomeAsUpIndicator(upArrow); 
    if (getSupportActionBar() != null) { 
     getSupportActionBar().setDisplayHomeAsUpEnabled(false); 
     getSupportActionBar().setHomeButtonEnabled(false); 
    } 
0

Я предлагаю также этот код:

if (activity.getActionBar() != null) { 
    activity.getActionBar().setDisplayHomeAsUpEnabled(false); 
    activity.getActionBar().setHomeButtonEnabled(false); } 
0

вы также должны использовать режим блокировки ящика, если вы не хотите, меню ящик открыт путем перетаскивания

drawerView.setDrawerLockMode(DrawerLayout.LOCK_MODE_LOCKED_CLOSED, drawerView) 
+0

перетаскивание в порядке, но в баре действий нужно сделать – Boopathi

Смежные вопросы