0

[更新]手柄主頁按鈕單擊事件

我已經改變了activity_main.xmlMainActivity.class如下:Creating a Navigation Drawer,從Android開發人員指南,現在,它完美的作品。


我使用的是DrawerLayoutMainActivity,其中包含一個FrameLayout只是設置不同Fragments但我不能處理它的點擊。它的工作原理,菜單打開和關閉,但我不知道如何或在哪裏管理它們。這是我的代碼:

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

試試這個

+0

它也不起作用。我在切換點進行了調試,甚至沒有停在那裏。 –

0

您正在使用NavigationView自定義列表視圖,你們給setOnItemClickListener列表視圖不NavigationView,因此呼叫會來

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

    } 

,但我不知道你班上的這段代碼在哪裏?

對於你的情況,回調會來到onItemClick不在onNavigationItemSelected。

如果您有任何問題,請讓我知道。

+0

你是對的,列表項是從'onItemClick'調用的,但是我想處理'ActionBar'的主頁按鈕,完全不同。 –