6

質問

Android Studio Template の Navigation Drawer を使用しています。「ハンバーガー」ボタンの一部のフラグメントでUP ボタン (矢印)を使用したいと考えています。私は使用します。AppCompatActivity

このコードを使用して、UP ボタンの矢印を表示します。

public void UseUpButton(boolean value) {
    ActionBar actionBar = getSupportActionBar();
    if (value) {
        actionBar.setDisplayHomeAsUpEnabled(false);
        toggle.setDrawerIndicatorEnabled(false);
        actionBar.setDisplayHomeAsUpEnabled(true);
        actionBar.setDisplayShowHomeEnabled(true);
    } else {
        toggle.setDrawerIndicatorEnabled(true);
    }
}

試したバリアント:

しかし、私はこのボタンをクリックすることはできません。私はいくつかの方法を試しました:

使用するonOptionsItemSelected

public boolean onOptionsItemSelected(MenuItem item) {

    Log.d("WTF", "menu");
    switch (item.getItemId())
    {
        case android.R.id.home:
            getFragmentManager().popBackStack();
            return true;
        default:
            return super.onOptionsItemSelected(item);
    }
}

に追加getSupportActionBar().setHomeButtonEnabled(true);しましたActivity::onCreateonOptionsItemSelected、上ボタンを押しても呼び出されず、メニュー項目を押しても正しく動作します。

ActionBarToggle OnClickListener を使用する

DrawerLayout drawer = (DrawerLayout) findViewById(R.id.drawer_layout);
toggle = new ActionBarDrawerToggle(
            this, drawer, toolbar, R.string.navigation_drawer_open,       
            R.string.navigation_drawer_close);

drawer.setDrawerListener(toggle);
toggle.syncState();
toggle.setToolbarNavigationClickListener(new View.OnClickListener()
{
        @Override
        public void onClick(View v) {

        }
 });

ただし、このメソッドは Up ボタンを押しても呼び出されません。

結論:

では、Up ボタンのプレス イベントをキャッチするにはどうすればよいでしょうか。

4

5 に答える 5

7

数日前にどこかで見つけた...

私のコードでは、初期化しますActionBarDrawerToggle。いくつかのコンストラクターがありますが、私はこれに興味があります:

1

public ActionBarDrawerToggle(Activity activity, DrawerLayout drawerLayout,
        @StringRes int openDrawerContentDescRes,
        @StringRes int closeDrawerContentDescRes) {
    this(activity, null, drawerLayout, null, openDrawerContentDescRes,
            closeDrawerContentDescRes);
}

2

public ActionBarDrawerToggle(Activity activity, DrawerLayout drawerLayout,
        Toolbar toolbar, @StringRes int openDrawerContentDescRes,
        @StringRes int closeDrawerContentDescRes) {
    this(activity, toolbar, drawerLayout, null, openDrawerContentDescRes,
            closeDrawerContentDescRes);
}

見てみましょう: 2 番目のコンストラクターにはToolbar toolbar引数があります。

UP BUTTONイベントを処理したい場合は、2nd CONSTUCTORを使用せず、最初に使用してください。

例:

toggle = new ActionBarDrawerToggle(
            this,
            drawer,
            R.string.navigation_drawer_open,
            R.string.navigation_drawer_close);

getSupportActionBar().setHomeButtonEnabled(true);

setHomeButtonEnabledこれがないと、ハンバーガーやアップボタンが表示されません。

于 2016-04-30T12:22:29.810 に答える
3

メソッドに数行追加して、戻るボタンを実装します。

  public void useUpButton(boolean value) {
    ActionBar actionBar = getSupportActionBar();
    if (value) {
        actionBar.setDisplayHomeAsUpEnabled(false);
        toggle.setDrawerIndicatorEnabled(false);
        actionBar.setDisplayHomeAsUpEnabled(true);
        actionBar.setDisplayShowHomeEnabled(true);
        toggle.setToolbarNavigationClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                onBackPressed();
            }
        });
    } else {
        toggle.setDrawerIndicatorEnabled(true);
        toggle.setToolbarNavigationClickListener(null);
    }
}
于 2017-07-16T15:14:13.083 に答える
1

ハンバーガーボタンを開いた引き出しにするデフォルトの動作については、このコードを使用できます

    Toolbar mToolbar = (Toolbar) findViewById(R.id.toolbar);
    setSupportActionBar(mToolbar);

    DrawerLayout drawer = (DrawerLayout) findViewById(R.id.drawer_layout);
    ActionBarDrawerToggle mActionBarDrawerToggle = new ActionBarDrawerToggle(
            this, drawer, mToolbar, R.string.navigation_drawer_open, R.string.navigation_drawer_close);
    drawer.setDrawerListener(mActionBarDrawerToggle);
    mActionBarDrawerToggle.syncState();

次に、子アクティビティのデフォルトの動作をオーバーライドするには、これを行います

    getSupportActionBar().setDisplayHomeAsUpEnabled(true);  // shows the up navigation button instead of the hamburger

    mToolbar.setNavigationOnClickListener(new View.OnClickListener()
    {
        @Override
        public void onClick(View v)
        {
            finish(); //end current activity
        }
    });

ActionBarDrawerToggle がツールバーを入力として受け取ると、独自の NavigationOnClickListener をツールバーに設定します。これをオーバーライドして、上ボタンがクリックされたときにコードを呼び出すことができます。

于 2017-01-15T00:13:33.980 に答える