Nic*_* Su 15 android navigation-drawer android-navigationview
我在我的应用程序中实现了一个导航视图,该视图是由我自动创建的AndroidStudio.NavigationDrawer Activity当我创建一个新项目并且菜单项看起来没问题时我拿起了,但是当我点击任何一个菜单项时没有任何事情发生.以下是我的onNavigationItemSelected()方法:
@Override
public boolean onNavigationItemSelected(MenuItem item) {
Toast.makeText(MainActivity.this,"onNavigationItemSelected",Toast.LENGTH_LONG).show();
// Handle navigation view item clicks here.
item.setChecked(true);
int id = item.getItemId();
if (id == R.id.medicalRecord) {
Toast.makeText(MainActivity.this,id,Toast.LENGTH_LONG).show();
}
DrawerLayout drawer = (DrawerLayout) findViewById(R.id.drawer_layout);
drawer.closeDrawer(GravityCompat.START);
return true;
}
Run Code Online (Sandbox Code Playgroud)
}
我的onCreate方法,我在其中创建NavigationView
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
LinearLayout linearLayout = (LinearLayout) findViewById(R.id.linear_layout);
if (babyImage.exists()) {
Drawable drawable = Drawable.createFromPath(Environment.getExternalStorageDirectory() + "/babycare/temp.jpg");
linearLayout.setBackground(drawable);
}
DrawerLayout drawerLayout = (DrawerLayout) findViewById(R.id.drawer_layout);
drawerLayout.openDrawer(Gravity.LEFT);
NavigationView navigationView = (NavigationView) findViewById(R.id.nav_view);
navigationView.setNavigationItemSelectedListener(this);
}
Run Code Online (Sandbox Code Playgroud)
当然,我为我的类实现了NavigationView.OnNavigationItemSelectedListener.
我想知道这个NavigationView是否应该在Material Design主题中实现.现在我的应用程序中使用的主题是@style/AppTheme
请有人帮帮我,谢谢
Nic*_* Su 24
我解决了我的问题,只需更改activity_main.xml中的顺序即可.我在DrawerLayout视图组中有一个LinearLayout视图组和NavigationView,起初我的视图组中的第一个是NavigationView,现在我改变了顺序,第一个是LinearLayout,第二个是NavigationView,它按照预期的方式工作.亲!!!
但有人可以告诉我为什么会这样吗?无论显示顺序如何,视图组中的视图顺序是否重要.
leo*_*rdo 14
该抽屉式导航栏帮助这样说:
主内容视图(上面的FrameLayout)必须是DrawerLayout中的第一个子节点,因为XML顺序意味着z-ordering,抽屉必须位于内容之上.
关于这个例子:
<android.support.v4.widget.DrawerLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/drawer_layout"
android:layout_width="match_parent"
android:layout_height="match_parent">
<!-- The main content view -->
<FrameLayout
android:id="@+id/content_frame"
android:layout_width="match_parent"
android:layout_height="match_parent" />
<!-- The navigation drawer -->
<ListView android:id="@+id/left_drawer"
android:layout_width="240dp"
android:layout_height="match_parent"
android:layout_gravity="start"
android:choiceMode="singleChoice"
android:divider="@android:color/transparent"
android:dividerHeight="0dp"
android:background="#111"/>
</android.support.v4.widget.DrawerLayout>
Run Code Online (Sandbox Code Playgroud)
所以这就是解释,如果由于自动生成的模板而导致布局顺序错误,那会有什么烦人的.我曾经多次面对Android Studio遇到过这种"问题",而且非常令人沮丧.
Sat*_*ran 10
我也有这个问题,我终于找出了什么问题,我最初创建了一个带导航抽屉的示例项目,主要活动xml如下,
<include
layout="@layout/app_bar_main"
android:layout_width="match_parent"
android:layout_height="match_parent" />
<android.support.design.widget.NavigationView
android:id="@+id/nav_view"
android:layout_width="wrap_content"
android:layout_height="match_parent"
android:layout_gravity="start"
android:fitsSystemWindows="true"
app:headerLayout="@layout/nav_header_main"
app:menu="@menu/activity_main_drawer" />
Run Code Online (Sandbox Code Playgroud)
但在实际的应用程序中,我犯了这样的错误,
<?xml version="1.0" encoding="utf-8"?>
<android.support.v4.widget.DrawerLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:id="@+id/drawer_layout"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:fitsSystemWindows="true"
tools:openDrawer="start">
<android.support.design.widget.NavigationView
android:id="@+id/nav_view"
android:layout_width="wrap_content"
android:layout_height="match_parent"
android:layout_gravity="start"
android:fitsSystemWindows="true"
app:headerLayout="@layout/nav_header_main"
app:menu="@menu/activity_main_drawer" />
<LinearLayout...../>
</android.support.v4.widget.DrawerLayout>
Run Code Online (Sandbox Code Playgroud)
我在NavigationView下面有一个LinearLayout,这是个问题.
然后我做了这件事,一切都开始好起来了.
<?xml version="1.0" encoding="utf-8"?>
<android.support.v4.widget.DrawerLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:id="@+id/drawer_layout"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:fitsSystemWindows="true"
tools:openDrawer="start">
<LinearLayout...../>
<android.support.design.widget.NavigationView
android:id="@+id/nav_view"
android:layout_width="wrap_content"
android:layout_height="match_parent"
android:layout_gravity="start"
android:fitsSystemWindows="true"
app:headerLayout="@layout/nav_header_main"
app:menu="@menu/activity_main_drawer" />
</android.support.v4.widget.DrawerLayout>
Run Code Online (Sandbox Code Playgroud)
关键是将NavigationView放在最后.很奇怪,用户界面没有被打扰,但回调是.
我刚刚遇到了这个问题,但没有一个答案对我有帮助。但最后我解决了。就我而言,没有调用侦听器,因为我在活动中使用了:
NavigationUI.setupWithNavController(navigationView, navController);
Run Code Online (Sandbox Code Playgroud)
这会覆盖我的OnNavigationItemSelectedListener,所以我删除了该行并将侦听器设置如下:
final NavigationView navigationView = findViewById(R.id.nav_view);
navigationView.setNavigationItemSelectedListener(new
NavigationView.OnNavigationItemSelectedListener() {
@Override
public boolean onNavigationItemSelected(@NonNull MenuItem item) {
FragmentManager fm = getSupportFragmentManager();
fm.popBackStackImmediate();
boolean handled = NavigationUI.onNavDestinationSelected(item, navController);
if (handled) {
ViewParent parent = navigationView.getParent();
if (parent instanceof DrawerLayout) {
((DrawerLayout) parent).closeDrawer(navigationView);
}
}
return handled;
}
});
Run Code Online (Sandbox Code Playgroud)
这是覆盖我的侦听器的一段 NavigationUI:
public static void setupWithNavController(@NonNull final NavigationView navigationView,
@NonNull final NavController navController) {
navigationView.setNavigationItemSelectedListener(
new NavigationView.OnNavigationItemSelectedListener() {
@Override
public boolean onNavigationItemSelected(@NonNull MenuItem item) {
boolean handled = onNavDestinationSelected(item, navController);
//******* CUTTED ***************
return handled;
}
});
}
Run Code Online (Sandbox Code Playgroud)
我希望它能有所帮助。
| 归档时间: |
|
| 查看次数: |
7410 次 |
| 最近记录: |