0

[UPDATE]ハンドルホームボタンのクリックイベント

次のように私はactivity_main.xmlMainActivity.classを変更した:Creating a Navigation Drawer Androidデベロッパーガイドから、今では完璧に動作します。


私はちょうどFragments異なる設定するFrameLayoutが含まれていますが、私はそのクリックを扱うことができないんだけどこれは、私のMainActivityためDrawerLayoutを使用しています。それは動作し、メニューは開いたり閉じたりしますが、どのように管理するのか分かりません。これは私のコードです:

toolbar.xml

<android.support.v7.widget.Toolbar 
    xmlns:android="http://schemas.android.com/apk/res/android" 
    android:id="@+id/toolbar" 
    android:layout_width="match_parent" 
    android:layout_height="wrap_content" 
    android:minHeight="?attr/actionBarSize"/> 

activity_main.xml

<android.support.v4.widget.DrawerLayout 
    xmlns:android="http://schemas.android.com/apk/res/android" 
    xmlns:tools="http://schemas.android.com/tools" 
    android:id="@+id/drawer_layout" 
    android:orientation="vertical" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    tools:openDrawer="start"> 

    <LinearLayout 
     android:layout_width="match_parent" 
     android:layout_height="match_parent" 
     android:id="@+id/ll_main_layout" 
     android:orientation="vertical"> 

     <include layout="@layout/toolbar" 
      android:id="@+id/toolbar"/> 

     <FrameLayout 
      android:id="@+id/main_frameLayout" 
      android:layout_width="match_parent" 
      android:layout_height="match_parent" /> 
    </LinearLayout> 

    <android.support.design.widget.NavigationView 
     android:id="@+id/navigation_view" 
     android:layout_width="wrap_content" 
     android:layout_height="match_parent" 
     android:layout_gravity="start"> 

     <LinearLayout 
      android:layout_width="match_parent" 
      android:layout_height="match_parent" 
      android:orientation="vertical"> 

      <include layout="@layout/lateral_menu_header" /> 

      <ListView 
       android:layout_width="match_parent" 
       android:layout_height="match_parent" 
       android:id="@+id/lateral_menu_listView" 
       android:layout_marginTop="16dp" 
       android:divider="@android:color/transparent" 
       android:dividerHeight="0dp"/> 
     </LinearLayout> 
    </android.support.design.widget.NavigationView> 
</android.support.v4.widget.DrawerLayout> 

MainActivity.class

public class MainActivity extends AppCompatActivity 
     implements ListView.OnItemClickListener { 

    private static final String LOG_TAG = MainActivity.class.getSimpleName(); 
    private static final String CURRENT_FRAGMENT = "mCurrentFragment"; 

    private DrawerLayout mDrawerLayout; 
    private ActionBarDrawerToggle mDrawerToggle; 
    private ListView mDrawerList; 
    private ArrayList<LateralMenuItem> lateralMenuItems; 

    private Toolbar mToolbar; 
    public ActionBar mActionBar; 

    private FragmentManager mFragmentManager; 


    @Override 
    public void onCreate(@Nullable Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_main); 

     initToolbar(); 
     initLateralMenu(); 

     mFragmentManager = getSupportFragmentManager(); 
    } 

    private void initLateralMenu() { 
     mDrawerLayout = (DrawerLayout) findViewById(R.id.drawer_layout); 
     if (mDrawerLayout != null) { 
      mDrawerToggle = new ActionBarDrawerToggle(this, mDrawerLayout, mToolbar, 0, 0); 
      mDrawerToggle.syncState(); 

      mDrawerLayout.addDrawerListener(mDrawerToggle); 

      mDrawerList = (ListView) findViewById(R.id.lateral_menu_listView); 
      if (mDrawerList != null) { 
       lateralMenuItems = initLateralMenuList(); 

       LateralMenuListAdapter lateralMenuListAdapter = new LateralMenuListAdapter(MainActivity.this, lateralMenuItems); 
       mDrawerList.setAdapter(lateralMenuListAdapter); 

       mDrawerList.setOnItemClickListener(this); 
      } 
     } 
    } 

    private void initToolbar() { 
     mToolbar = (Toolbar) findViewById(R.id.toolbar); 
     setSupportActionBar(mToolbar); 

     mActionBar = getSupportActionBar(); 
    } 

    @Override 
    public boolean onCreateOptionsMenu(Menu menu) { 
     return super.onCreateOptionsMenu(menu); 
    } 

    @Override 
    public boolean onOptionsItemSelected(MenuItem item) { 
     if(mDrawerToggle.onOptionsItemSelected(item)) { 
      // THIS DOESN'T WORK, I'VE DEBUGGED AND IS UNREACHABLE 
     } 
     return super.onOptionsItemSelected(item); 
    } 
} 

事はonOptionesItemSelected(MenuItem item)が機能していないということです。また、mDrawerToggle.setToolbarNavigationClickListener(...),mToolbar.setOnMenuItemClickListener(...)mToolbar.setNavigationOnClickListener()を設定しようとしましたが、いずれも機能しませんでした。

私の目的は、私がどちらかにいるときに処理することです。Fragmentは、ホームボタンを上に設定し、onBackPressed()を上書きすることができます。

DrawerLayoutを使用するとロジックが異なる場合がありますが、何か不足していますか?

答えて

0
@SuppressWarnings("StatementWithEmptyBody") 
@Override 
public boolean onNavigationItemSelected(@NonNull MenuItem item) { 

    switch (item.getItemId()) { 

     case R.id.nav_logout: 
      logoutDialog(); 
      break; 
    } 
    DrawerLayout drawer = (DrawerLayout) findViewById(R.id.drawer_layout); 
    drawer.closeDrawer(GravityCompat.START); 
    return true; 
} 

あなたはカスタムリストビューでNavigationViewを使用していて、リストビューではないNavigationViewにsetOnItemClickListenerを与えたため、コールが

@Override 
    public void onItemClick(AdapterView<?> parent, View view, int position, long id) { 

    } 

に来るが、私はわからないこの

+0

これは動作しません。私はスイッチポイントでデバッグしましたが、そこでは停止しません。 –

0

をお試しくださいあなたのクラスのこのコードはどこにありますか?

ケースコールバックは、ではなくonNavigationItemSelectedになります。

ご不明な点がございましたら、お知らせください。

+0

あなたはそうです、リストアイテムは 'onItemClick'から呼び出されますが、私は' ActionBar'のホームボタンを扱いたい、全く違うものです。 –

関連する問題