首页 > 解决方案 > 点击导航抽屉关闭自己Android工作室

问题描述

我已经在我的移动应用程序上实现了导航抽屉,每当我打开抽屉并单击抽屉时,抽屉就会自行关闭。它曾经完美地工作,直到我实现了另一个功能,我对如何解决这个问题感到困惑。这是我的主要活动代码。我现在无法使用导航抽屉进行导航。

package com.example.admin.calendlist;

import android.content.DialogInterface;
import android.content.Intent;
import android.graphics.PorterDuff;
import android.graphics.drawable.Drawable;
import android.support.annotation.NonNull;
import android.support.design.widget.NavigationView;
import android.support.v4.view.GravityCompat;
import android.support.v4.widget.DrawerLayout;
import android.support.v7.app.ActionBarDrawerToggle;
import android.support.v7.app.AlertDialog;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.widget.ArrayAdapter;
import android.widget.EditText;
import android.widget.ListView;
import android.widget.TextView;

import java.util.ArrayList;

public class MainActivity extends AppCompatActivity  {
    private DrawerLayout mDrawerLayout;
    private ActionBarDrawerToggle mToggle;
    DatabaseHelper dbHelper;
    ArrayAdapter<String> mAdapter;
    ListView lstTask;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        mDrawerLayout = (DrawerLayout)findViewById(R.id.drawer);
        mToggle = new ActionBarDrawerToggle(this,mDrawerLayout, R.string.open,R.string.close);
        mDrawerLayout.addDrawerListener(mToggle);
        mToggle.syncState();
        dbHelper = new DatabaseHelper(this);
        lstTask = (ListView)findViewById(R.id.lstTask);
        getSupportActionBar().setDisplayHomeAsUpEnabled(true);
        NavigationView nvDrawer = (NavigationView)findViewById(R.id.nav_view);
        setupDrawerContent(nvDrawer);
        loadTaskList();

    }

    private void loadTaskList() {
        ArrayList<String> taskList = dbHelper.getTaskList();
        if(mAdapter==null){
            mAdapter = new ArrayAdapter<String>(this, R.layout.row,R.id.task_title,taskList);
            lstTask.setAdapter(mAdapter);
        }
        else{
            mAdapter.clear();
            mAdapter.addAll(taskList);
            mAdapter.notifyDataSetChanged();
        }
    }

    @Override
    public boolean onOptionsItemSelected(MenuItem item) {
        if (mToggle.onOptionsItemSelected(item)){
            return true;
        }
         {
            switch (item.getItemId()) {
             case R.id.action_add_task:
                 final EditText taskEditText = new EditText(this);
                 AlertDialog dialog = new AlertDialog.Builder(this)
                         .setTitle("Add New Task")
                         .setMessage("What do you want to do next?")
                         .setView(taskEditText)
                         .setPositiveButton("Add", new DialogInterface.OnClickListener() {
                             @Override
                             public void onClick(DialogInterface dialog, int which) {
                                 String task = String.valueOf(taskEditText.getText());
                                 dbHelper.insertNewTask(task);
                                 loadTaskList();
                             }
                         })
                         .setNegativeButton("Cancel", null)
                         .create();
                 dialog.show();
         }
             switch (item.getItemId()) {
                 case R.id.td:
                     Intent newIntent = new Intent(this,MainActivity.class);
                     return true;
             }
             switch (item.getItemId()) {
                 case R.id.tt:
                     Intent newIntent = new Intent(this,Timetable.class);
                     return true;
             }
             switch (item.getItemId()) {
                 case R.id.ep:
                     Intent newIntent = new Intent(this,EventPage.class);
                     return true;
             }
        }
        return super.onOptionsItemSelected(item);
    }

    private void selectItemDrawer(MenuItem item) {
        int id = item.getItemId();
         if (id ==R.id.ep) {
             Intent newItent = new Intent (this, EventPage.class);
             startActivity(newItent);
         }
         else if (id == R.id.td) {
             Intent newIntent = new Intent (this,MainActivity.class);
             startActivity(newIntent);
         }
         else if (id == R.id.tt) {
             Intent newIntent = new Intent (this,Timetable.class);
             startActivity(newIntent);
         }
         DrawerLayout drawer = findViewById(R.id.drawer);
         drawer.closeDrawer(GravityCompat.START);
    }
    private void setupDrawerContent (NavigationView navigationView) {
        navigationView.setNavigationItemSelectedListener (new NavigationView.OnNavigationItemSelectedListener() {
            @Override
            public boolean onNavigationItemSelected(@NonNull MenuItem item) {
                selectItemDrawer(item);
                return true;
            }
        });
    }

    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        getMenuInflater().inflate(R.menu.listmenu,menu);
        Drawable icon =menu.getItem(0).getIcon();
        icon.mutate();
        icon.setColorFilter(getResources().getColor(android.R.color.black), PorterDuff.Mode.SRC_IN);
        return super.onCreateOptionsMenu(menu);
    }

    public void deleteTask(View view){
        View parent = (View)view.getParent();
        TextView taskTextView = (TextView)findViewById(R.id.task_title);
        String task = String.valueOf(taskTextView.getText());
        dbHelper.deleteTask(task);
        loadTaskList();
    }

}

标签: javaandroid

解决方案


如果您不希望每次单击都关闭导航,请这样写:

NavigationView navigationView = findViewById(R.id.navigationView);
navigationView.bringToFront();

推荐阅读