简体   繁体   English

在菜单图标上未打开导航抽屉,在工具栏上单击

[英]Navigation drawer not open on menu icon click on toolbar

I want to open drawer on menu icon click but it not work.see this image what i want to say.... 我想在菜单图标上单击以打开抽屉,但它不起作用。请参见此图像我要说的...。

在此处输入图片说明

Following code work for when we slide but not work for menu icon click. 以下代码在我们滑动时适用,但不适用于菜单图标单击。

Please check my problem and help me... 请检查我的问题并帮助我...

Thanks for your valuable time... 感谢您的宝贵时间...

MainActicity.java MainActicity.java

public class MainActivity extends AppCompatActivity implements
    FragmentDrawerListener {

private Toolbar toolbar;
private FragmentDrawer drawerFragment;

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

    toolbar = (Toolbar) findViewById(R.id.toolbar);
    toolbar.setNavigationIcon(getResources().getDrawable(R.drawable.ic_launcher));
    setSupportActionBar(toolbar);
    getSupportActionBar().setDisplayHomeAsUpEnabled(true);
     getSupportActionBar().setHomeButtonEnabled(true);
    drawerFragment = (FragmentDrawer) getSupportFragmentManager()
            .findFragmentById(R.id.fragment_navigation_drawer);
    drawerFragment.setUp(R.id.fragment_navigation_drawer,
            (DrawerLayout) findViewById(R.id.drawer_layout), toolbar);
    drawerFragment.setDrawerListener(this);
    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();
    if (id == R.id.action_settings) {
        return true;
    } 
    return super.onOptionsItemSelected(item);
}

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

FragmentDrawer.java FragmentDrawer.java

public class FragmentDrawer extends Fragment {

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

private static String[] titles = null;

private RecyclerView recyclerView;
private NavigationDrawerAdapter adapter;
private ActionBarDrawerToggle mDrawerToggle;
private DrawerLayout mDrawerLayout;
private FragmentDrawerListener drawerListener;
private View containerView;

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);
    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;
}

/**
 * 
 * @param fragmentId
 * @param drawerLayout
 * @param toolbar
 */
public void setUp(int fragmentId, DrawerLayout drawerLayout, final Toolbar toolbar) {

    containerView = getActivity().findViewById(fragmentId);
    mDrawerLayout = drawerLayout;
    mDrawerToggle = new ActionBarDrawerToggle(getActivity(), mDrawerLayout, R.string.drawer_open, R.string.drawer_close) {
        @Override
        public void onDrawerClosed(View drawerView) {
            super.onDrawerClosed(drawerView);
            getActivity().invalidateOptionsMenu();
        }
        @Override
        public void setToolbarNavigationClickListener(
                OnClickListener onToolbarNavigationClickListener) {
            // TODO Auto-generated method stub
            super.setToolbarNavigationClickListener(onToolbarNavigationClickListener);
            Log.i("RAJAT", "I am here");
        }

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

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

        @Override
        public boolean onOptionsItemSelected(MenuItem item) {
            Log.d("RAJAT", "click ON OPTION ITEM");
            if(mDrawerToggle.onOptionsItemSelected(item)) {
                Log.d("RAJAT", "click here");
                return true;
            }
            return super.onOptionsItemSelected(item);
        }

        @Override
        public void onConfigurationChanged(Configuration newConfig) {
            super.onConfigurationChanged(newConfig);
            mDrawerToggle.onConfigurationChanged(newConfig);
        }

    };

    mDrawerLayout.setDrawerListener(mDrawerToggle);
    mDrawerLayout.post(new Runnable() {
        @Override
        public void run() {
            // Sync the toggle state after onRestoreInstanceState has occurred.
            mDrawerToggle.syncState();
        }
    });
}

static class RecyclerTouchListener implements RecyclerView.OnItemTouchListener {

    private ClickListener clickListener;
    private GestureDetector gestureDetector;

    public RecyclerTouchListener(Context context, final RecyclerView recyclerView, final ClickListener clickListener) {
        // TODO Auto-generated constructor stub
        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 onRequestDisallowInterceptTouchEvent(boolean arg0) {

    }

    @Override
    public void onTouchEvent(RecyclerView arg0, MotionEvent arg1) {

    }

}

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

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

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

Try this block of code 尝试这段代码

@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.
     if (item.getItemId() == android.R.id.home) {
        if(mDrawerLayout.isDrawerOpen(Gravity.LEFT)) {
                        mDrawerLayout.closeDrawer(Gravity.LEFT);
                    }else{
                        mDrawerLayout.openDrawer(Gravity.LEFT);
                    }      

    }else if (item.getItemId()== R.id.action_settings) {
        return true;
    } 
    return super.onOptionsItemSelected(item);
}
  final DrawerLayout drawer = (DrawerLayout) findViewById(R.id.drawer_layout);
    ActionBarDrawerToggle toggle = new ActionBarDrawerToggle(
            this, drawer, toolbar, R.string.navigation_drawer_open, R.string.navigation_drawer_close);
    drawer.setDrawerListener(toggle);
    toggle.syncState();

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

相关问题 单击导航抽屉图标时如何打开导航抽屉 - How to open Navigation Drawer when click on navigation drawer icon 隐藏导航抽屉中某些片段的工具栏中的菜单图标 - Hide menu icon in toolbar for some fragments in navigation drawer 单击工具栏上的汉堡图标不会打开导航抽屉 - Clicking hamburger icon on Toolbar does not open Navigation Drawer 按下工具栏中的汉堡包图标时,导航抽屉无法打开 - Navigation drawer does not open when pressing the hamburger icon in toolbar 单击工具栏上的汉堡包图标不会打开导航抽屉 - Clicking hamburger icon on Toolbar does not open Navigation Drawer 单击导航抽屉默认菜单上的项目时如何打开另一个菜单 - how to open another menu on click of item on the default menu of navigation drawer 单击底部菜单时如何打开侧面导航抽屉? - How to open the side navigation drawer when click on bottom menu? 单击导航抽屉菜单中的项目后打开新活动 - Open new Activity after click item in navigation drawer menu 没有工具栏的导航抽屉切换图标 - Navigation Drawer Toggle Icon without toolbar 在popBackStack()之后将工具栏更改为抽屉/菜单图标? - Changing Toolbar to drawer/menu icon after popBackStack()?
 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM