Xamarin.Android - ToolbarNavigationClickListener [英] Xamarin.Android - ToolbarNavigationClickListener

查看:25
本文介绍了Xamarin.Android - ToolbarNavigationClickListener的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我的问题类似于这个问题

您可以从链接下载源文件以供参考.

https://docs.microsoft.com/en-us/samples/xamarin/monodroid-samples/android50-navigationdrawer/

My question is similar to this question Android - Switch ActionBar Back Button to Navigation Button, but I have problems using the Java code that I changed to c#.

import android.support.v7.app.ActionBarDrawerToggle
import android.support.v4.widget.DrawerLayout

ActionBarDrawerToggle mDrawerToggle;
DrawerLayout drawerLayout;
private boolean mToolBarNavigationListenerIsRegistered = false;

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

    setSupportActionBar(mToolbar);
    getSupportActionBar().setDisplayShowTitleEnabled(false);
    // Get DrawerLayout ref from layout
    drawerLayout = (DrawerLayout)findViewById(R.id.drawer);
    // Initialize ActionBarDrawerToggle, which will control toggle of hamburger.
    // You set the values of R.string.open and R.string.close accordingly.
    // Also, you can implement drawer toggle listener if you want.
    mDrawerToggle = new ActionBarDrawerToggle (this, drawerLayout, mToolbar, R.string.open, R.string.close);
    // Setting the actionbarToggle to drawer layout
    drawerLayout.addDrawerListener(mDrawerToggle);
    // Calling sync state is necessary to show your hamburger icon...
    // or so I hear. Doesn't hurt including it even if you find it works
    // without it on your test device(s)
    mDrawerToggle.syncState();
}

/**
 * To be semantically or contextually correct, maybe change the name
 * and signature of this function to something like:
 *
 * private void showBackButton(boolean show)
 * Just a suggestion.
 */
 private void enableViews(boolean enable) {

    // To keep states of ActionBar and ActionBarDrawerToggle synchronized,
    // when you enable on one, you disable on the other.
    // And as you may notice, the order for this operation is disable first, then enable - VERY VERY IMPORTANT.
    if(enable) {
        //You may not want to open the drawer on swipe from the left in this case  
        drawerLayout.setDrawerLockMode(DrawerLayout.LOCK_MODE_LOCKED_CLOSED);
        // Remove hamburger
        mDrawerToggle.setDrawerIndicatorEnabled(false);
        // Show back button
        getSupportActionBar().setDisplayHomeAsUpEnabled(true);
        // when DrawerToggle is disabled i.e. setDrawerIndicatorEnabled(false), navigation icon
        // clicks are disabled i.e. the UP button will not work.
        // We need to add a listener, as in below, so DrawerToggle will forward
        // click events to this listener.
        if(!mToolBarNavigationListenerIsRegistered) {
            mDrawerToggle.setToolbarNavigationClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View v) {
                    // Doesn't have to be onBackPressed
                    onBackPressed();
                }
            });

            mToolBarNavigationListenerIsRegistered = true;
        }

    } else {
        //You must regain the power of swipe for the drawer. 
        drawerLayout.setDrawerLockMode(DrawerLayout.LOCK_MODE_UNLOCKED);

        // Remove back button
        getSupportActionBar().setDisplayHomeAsUpEnabled(false);
        // Show hamburger 
        mDrawerToggle.setDrawerIndicatorEnabled(true);
        // Remove the/any drawer toggle listener
        mDrawerToggle.setToolbarNavigationClickListener(null);
        mToolBarNavigationListenerIsRegistered = false;
    }

    // So, one may think "Hmm why not simplify to:
    // .....
    // getSupportActionBar().setDisplayHomeAsUpEnabled(enable);
    // mDrawer.setDrawerIndicatorEnabled(!enable);
    // ......
    // To re-iterate, the order in which you enable and disable views IS important #dontSimplify.
}

So my question is how to change the button navigation click listener, from the hambuger to open the navigation drawer to the back button which functions to close the activity. is it possible to use ToolbarNavigationClickListener like the java code, if so, how?

解决方案

With the link and the description you provided, it seems you want to change the back button to the hamburger icon and have the click event for this hamburger.

In Xamarin.Android, you could use ActionBarDrawerToggle. Create your own MyActionBarDrawerToggle.

    internal class MyActionBarDrawerToggle : ActionBarDrawerToggle
    {
        NavigationDrawerActivity owner;

        public MyActionBarDrawerToggle (NavigationDrawerActivity activity, DrawerLayout layout, int imgRes, int openRes, int closeRes)
            : base (activity, layout, imgRes, openRes, closeRes)
        {
            owner = activity;
        }

        public override void OnDrawerClosed (View drawerView)
        {
            owner.ActionBar.Title = owner.Title;
            owner.InvalidateOptionsMenu ();
        }

        public override void OnDrawerOpened (View drawerView)
        {
            owner.ActionBar.Title = owner.mDrawerTitle;
            owner.InvalidateOptionsMenu ();
        }
    }

And then set the mDrawerToggle for this layout.

    mDrawerToggle = new MyActionBarDrawerToggle (this, mDrawerLayout,
            Resource.Drawable.ic_drawer, 
            Resource.String.drawer_open, 
            Resource.String.drawer_close);

        mDrawerLayout.SetDrawerListener (mDrawerToggle);
        if (savedInstanceState == null) //first launch
            selectItem (0);

Create the click listener for RecyclerView.

public interface OnItemClickListener{
        void OnClick(View view, int position);
    }

And then implement it in layout.

    public void OnClick (View view, int position)
    {
        selectItem (position);
    }

Screenshot:

You could download the source file from the link for reference.

https://docs.microsoft.com/en-us/samples/xamarin/monodroid-samples/android50-navigationdrawer/

这篇关于Xamarin.Android - ToolbarNavigationClickListener的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆