web-dev-qa-db-ja.com

メインフラグメントのボタンクリックでナビゲーションドロワーを開く方法は?

ナビゲーションドロワーを使用してさまざまなフラグメントを開く1つのアクティビティを含むアプリを作成しました。アクションバーの引き出しトグルを持っていますが、あまり見えません。メインフラグメント(アプリの最初の起動時に表示されるフラグメント)のonCreateViewにボタンを配置した場合、アクティビティによって制御されるナビゲーションドロワーを開くにはどうすればよいですか?


これはうまくいくようです。答えは思ったよりもずっと簡単です。

@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
        Bundle savedInstanceState) {
    View fragView = inflater.inflate(R.layout.mainmenu, container, false);
    button1 = (Button) fragView.findViewById(R.id.button1);         
    mDrawerLayout = (DrawerLayout)getActivity().findViewById(R.id.drawer_layout);
    mDrawerList = (ListView)getActivity().findViewById(R.id.left_drawer);
    button1.setOnClickListener(this);
    return fragView;
}


@Override
public void onClick(View v) {       

        mDrawerLayout.openDrawer(mDrawerList);          

    }

ご回答ありがとうございます。

15
user2729524

スライドを開く必要がある場合:

mDrawerLayout.openDrawer(Gravity.LEFT); //Edit Gravity.START need API 14

スライドを閉じる必要がある場合

mDrawerLayout.closeDrawer(Gravity.LEFT); //Edit Gravity.START need API 14

[〜#〜] example [〜#〜]

私のmDrawerLayoutはここにインスタンス化されています:

mDrawerLayout = (DrawerLayout)findViewById(R.id.my_drawer_layout);

私のスライドの状態:

mSlideState=false;

スライドメニューの状態(閉じた状態、開いた状態)を知る必要がある場合。このコードを使用してください:

mDrawerLayout.setDrawerListener(new ActionBarDrawerToggle(this, 
    mDrawerLayout, 
    R.drawable.ic_menu_slide,
    0,
    0){
@Override
public void onDrawerClosed(View drawerView) {                       
    super.onDrawerClosed(drawerView);
    mSlideState=false;//is Closed
}
@Override
public void onDrawerOpened(View drawerView) {                       
    super.onDrawerOpened(drawerView);
    mSlideState=true;//is Opened
}});

最後に。クリックイベントは次のように使用できます。

public void clickEventSlide(){
if(mSlideState){                
    mDrawerLayout.closeDrawer(Gravity.END);
}else{              
    mDrawerLayout.openDrawer(Gravity.END);
}}

私の場合、スライドメニューは右側(Gravity.END)にありますが、左側で必要な場合は、Gravity.START

60

isDrawerOpen() を使用したはるかに簡単なソリューションがあります。

これにより、ドロワーの現在の状態(Opened/Closed)に基づいてナビゲーションドロワーが自動的に閉じたり開いたりします。

    Button hamMenu = findViewById(R.id.ham_menu);

    hamMenu.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            DrawerLayout navDrawer = findViewById(R.id.drawer_layout);
            // If the navigation drawer is not open then open it, if its already open then close it.
            if(!navDrawer.isDrawerOpen(Gravity.START)) navDrawer.openDrawer(Gravity.START);
            else navDrawer.closeDrawer(Gravity.END);
        }
    });
7
Sapnesh Naik

Androidのデフォルトのナビゲーションアクティビティから使用している場合、ボタンのクリックリスナーにこのコードを追加するだけです--->

mDrawerLayout.openDrawer(Gravity.START);

閉じるためにあなたは何かをする必要はありません。

4
behrad

ツールバーをアプリバーとして適用するには、最初にアクティビティがAppCompatActivityから拡張されていることを確認します。次にsetSupportActionBar()を呼び出して、レイアウトからツールバーオブジェクトを渡します。

    toolbar=(Toolbar) findViewById(R.id.toolbar_main);
    setSupportActionBar(toolbar);
    ActionBar actionbar = getSupportActionBar();
    actionbar.setDisplayHomeAsUpEnabled(true);
    actionbar.setHomeAsUpIndicator(R.drawable.ic_menu_black_24dp);

    drawerLayout=(DrawerLayout)findViewById(R.id.drawer_layout);
    ActionBarDrawerToggle actionBarDrawerToggle=new ActionBarDrawerToggle(this,drawerLayout,R.string.navigation_drawer_open,
            R.string.navigation_drawer_close);
    drawerLayout.addDrawerListener(actionBarDrawerToggle);
    actionBarDrawerToggle.syncState();

}

@Override
public boolean onOptionsItemSelected(MenuItem item) {
    switch (item.getItemId()) {
        case Android.R.id.home:
            drawerLayout.openDrawer(GravityCompat.START);
            return true;
    }
    return super.onOptionsItemSelected(item);
}

@Override
public void onBackPressed() {
    if (drawerLayout.isDrawerOpen(GravityCompat.START)){
        drawerLayout.closeDrawer(GravityCompat.START);
    }
    else{
        super.onBackPressed();
    }
}

}

1
Kumar Ajay A.K

ここで説明するように、標準のコールバックモデルを使用します。

http://developer.Android.com/training/basics/fragments/communicating.html

ボタンを押すと、アクティビティへのコールバックを開始し、引き出しを開きます。

0
Kuffs

特定のイベントでドロワーを開閉するには、次の行を使用します。

引き出しを開くためのコードスニペット:

_drawerLayout.openDrawer(Gravity.START);
_

引き出しを閉じるためのコードスニペット:

_drawerLayout.closeDrawer(Gravity.LEFT);
_

openDrawer(gravity_of_navigation_view_to_be_shown)

openDrawer( "gravity")、 "gravity"セクションでは、上記のようにナビゲーションビューの重力を入力する必要があります。

_Gravity.LEFT
Gravity.RIGHT
Gravity.START
Gravity.END
_

それが最良の答えだと思います。

0
Muhammad Awais