[UPDATE]
我已经更改了activity_main.xml
和MainActivity.class
,如下所示:Creating a Navigation Drawer,来自Android开发人员指南,现在效果非常好。
我正在为DrawerLayout
使用MainActivity
,其中包含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 :(得分:0)
Column A
试试这个
答案 1 :(得分:0)
您正在使用带有自定义列表视图的NavigationView,并且您将$_SESSION
提供给列表视图而不是NavigationView,因此呼叫将转到
setOnItemClickListener
但我不确定你班上的这段代码在哪里。
对于你的情况,回调将来到@Override
public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
}
而不是onNavigationItemSelected。
如果您有任何疑问,请告诉我。