【问题标题】:navigation drawer wont start new activity after item click单击项目后,导航抽屉不会启动新活动
【发布时间】:2018-05-16 12:32:30
【问题描述】:

我正在尝试制作一个导航抽屉,当用户点击一个项目时它会打开一个新活动。

我的抽屉里有 3 个项目,我希望每个项目都打开一个不同的活动,但是当我单击项目时没有任何反应。

 public class MarkerActivity extends AppCompatActivity implements NavigationView.OnNavigationItemSelectedListener {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_markers);
        getWindow().getDecorView().setBackgroundColor(Color.WHITE);
        Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);
        setSupportActionBar(toolbar);
        getSupportActionBar().hide();

        mDrawerLayout = findViewById(R.id.drawer);
        ActionBarDrawerToggle toggle = new ActionBarDrawerToggle(this, mDrawerLayout, toolbar,
                R.string.open_drawer, R.string.close_drawer);
        mDrawerLayout.addDrawerListener(toggle);
        toggle.syncState();
        NavigationView navigationView = findViewById(R.id.nav_view);
        navigationView.setNavigationItemSelectedListener(this);

    @Override
    public boolean onNavigationItemSelected(@NonNull MenuItem item) {
        switch (item.getItemId()){
            case R.id.map_button:
                Intent intent = new Intent(MarkerActivity.this, MapActivity.class);
                startActivity(intent);
                break;
            case R.id.comingsoon:
                Toast.makeText(this, "Coming soon", Toast.LENGTH_SHORT).show();
                break;
            case R.id.comingsoon2:
                Toast.makeText(this, "Coming soon", Toast.LENGTH_SHORT).show();
                break;
        }
        mDrawerLayout.closeDrawer(GravityCompat.START);
        return true;
    }
}

我的activity_markers.xml

<android.support.v4.widget.DrawerLayout 
            android:id="@+id/activity_markers"
            android:layout_width="match_parent"
            android:layout_height="match_parent">

                <android.support.design.widget.NavigationView
                    android:id="@+id/drawer"
                    app:headerLayout="@layout/header"
                    android:layout_width="wrap_content"
                    android:layout_height="match_parent"
                    android:background="@color/white"
                    app:menu="@menu/drawermenu"
                    android:layout_gravity="start">

                </android.support.design.widget.NavigationView>
        </android.support.v4.widget.DrawerLayout>

drawermenu.xml

 <?xml version="1.0" encoding="utf-8"?>
<menu xmlns:android="http://schemas.android.com/apk/res/android">
    <item
        android:id="@+id/map_button"
        android:title="Map"/>
    <item android:id="@+id/comingsoon"
        android:title="Coming Soon"/>
    <item android:id="@+id/comingsoon2"
        android:title="Coming Soon"/>
</menu>

【问题讨论】:

标签: android navigation-drawer


【解决方案1】:

您可能将每个项目单独放在导航抽屉布局中。 如果是这样,您需要在 onCreate() 方法和 setOnClickListener 中定义这些元素。 你能分享一下导航抽屉布局xml吗?

否则,您定义了一个 ListView,但尚未对其进行初始化。

【讨论】:

  • 我分享了我的 xml
【解决方案2】:

navigationview和drawer的id不正确

试试这个:

    mDrawerLayout = findViewById(R.id.activity_markers);
    ActionBarDrawerToggle toggle = new ActionBarDrawerToggle(this, mDrawerLayout, toolbar,
            R.string.open_drawer, R.string.close_drawer);
    mDrawerLayout.addDrawerListener(toggle);
    toggle.syncState();
    NavigationView navigationView = findViewById(R.id.drawer);
    navigationView.setNavigationItemSelectedListener(this);

【讨论】:

  • 哦,我忘了改,但没用
  • 调试时会发生什么? Android 会在 switch case 中执行代码吗?
  • 也把这个放到drawerlayout xml中:xmlns:android="schemas.android.com/apk/res/android"
  • 当我点击项目导航抽屉正在关闭时
【解决方案3】:

我找到了答案。你只需要粘贴这一行 navigationView.bringToFront();NavigationView navigationView = findViewById(R.id.your_id); 之后

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-07-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多