【问题标题】:Sliding navigation drawer not handling clicks on menu items android滑动导航抽屉不处理点击菜单项android
【发布时间】:2018-07-21 12:50:16
【问题描述】:

我正在尝试在应用程序中使用滑动导航抽屉。但是,它似乎没有处理 OnItemClick 方法。当我点击一个项目时,什么也没有发生。我怎样才能让它工作?谢谢

//主活动

 protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    drawer_layout = (DrawerLayout)findViewById(R.id.drawerLayout);
    list_view = (ListView)findViewById(R.id.drawerList);
    menu_items = getResources().getStringArray(R.array.nav_drawer_items);
    list_view.setAdapter(new ArrayAdapter<>(this, android.R.layout.simple_list_item_1, menu_items));
    list_view.setOnItemClickListener(this);

}

@Override
 public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
    // TODO Auto-generated method stub



        Toast.makeText(MainActivity.this, menu_items[position] + " was selected", Toast.LENGTH_LONG).show();

}

// MainActivity.xml

 <android.support.v4.widget.DrawerLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/drawerLayout"
android:layout_width="match_parent"
android:layout_height="match_parent">
<FrameLayout
    android:id="@+id/mainContent"
    android:layout_width="match_parent"
    android:layout_height="match_parent" />

<ListView android:id="@+id/drawerList"
    android:layout_width="240dp"
    android:layout_height="match_parent"
    android:layout_gravity="left"
    android:background="@android:color/white"
    android:divider="@android:color/black"
    android:dividerHeight="1dp"
    android:listSelector="@android:color/black"
    android:choiceMode="singleChoice"
    /> 

<LinearLayout 
xmlns:tools="http://schemas.android.com/tools"
android:id="@+id/container"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:orientation="vertical"
tools:ignore="MergeRootFrame"
tools:context="com.example.MainActivity"
 >



<TextView
    android:id="@+id/tv1"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:text="@string/textview1"
    android:layout_gravity="center"
    android:textStyle="bold"
    android:textSize="20sp"
    android:gravity="center"
    android:layout_marginTop="30dp"/>


<Button 
  android:id="@+id/Button1"
  android:layout_width="100dp"
  android:layout_height="100dp"
  android:layout_gravity="center"
  android:background="@drawable/ok_button"
  android:layout_marginTop="20dp"/>

</LinearLayout>

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

【问题讨论】:

    标签: android


    【解决方案1】:

    您的 DrawerLayout 的子 Views 的 z 顺序不正确。抽屉的View - 在这种情况下,ListView - 需要列在最后,以便在其他所有内容之上。

    【讨论】:

    • 正确,我没有使用 z_order。现在它起作用了。非常感谢
    【解决方案2】:

    像这样简单:在 setContentView(R.layout.activity_main); 之后添加这行代码或者你的活动名称是什么。

    Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);
        setSupportActionBar(toolbar);
    
        // Initializing Drawer Layout and ActionBarToggle
        DrawerLayout drawer = (DrawerLayout) findViewById(R.id.drawer_layout);
        ActionBarDrawerToggle toggle = new ActionBarDrawerToggle(this,drawer,toolbar,R.string.navigation_drawer_open, R.string.navigation_drawer_close){
    
            @Override
            public void onDrawerClosed(View drawerView) {
                super.onDrawerClosed(drawerView);
            }
    
            @Override
            public void onDrawerOpened(View drawerView) {
                super.onDrawerOpened(drawerView);
            }
        };
        drawer.setDrawerListener(toggle);
        toggle.syncState();
    
        NavigationView navigationView = (NavigationView) findViewById(R.id.nav_view);
        navigationView.setNavigationItemSelectedListener(this);
        navigationView.bringToFront();
    

    然后进行下一步:

    @Override
    public boolean onNavigationItemSelected(MenuItem item) {
        displaySelectedScreen(item.getItemId());
        return true;
    }
    private void displaySelectedScreen(int itemId){
        try {
            switch (itemId) {
                case R.id.nav_menu1:
                    startActivity(new Intent(this, BActivity.class));
                    break;
                case R.id.nav_menu2:
                    startActivity(new Intent(this, CActivity.class));
                    break;
            }
    
        }
        catch (Exception e)
        {
            e.printStackTrace();
        }
    
        DrawerLayout drawer = (DrawerLayout) findViewById(R.id.drawer);
        drawer.closeDrawer(GravityCompat.START);
    }
    

    【讨论】:

      【解决方案3】:

      对于Left Menu Drawer Complete Simple,您可以尝试以下Simple....

      MainActivity.class

      private DrawerLayout mDrawerLayout;
      private ListView mDrawerList;
      private ActionBarDrawerToggle mDrawerToggle;
      private CharSequence mDrawerTitle;
      private CharSequence mTitle;
      private String[] navMenuTitles;
      private ArrayList<MainDrawerItem> navDrawerItems;
      private NavDrawerListAdapter adapter;
      @Override
      public void onCreate(Bundle savedInstanceState) {
          super.onCreate(savedInstanceState);
          setContentView(R.layout.activity_main);
          // for lefdrawer
          mTitle = mDrawerTitle = getTitle();
      
          // load slide menu items
          navMenuTitles = getResources().getStringArray(
                  R.array.dashboard_leftMenu);
      
          mDrawerLayout = (DrawerLayout) findViewById(R.id.drawer_dashboard_layout);
          mDrawerList = (ListView) findViewById(R.id.main_dash_left_list_drawer);
          navDrawerItems = new ArrayList<MainDrawerItem>();
           navDrawerItems.add(new MainDrawerItem(navMenuTitles[0], 0,
                  null, false));
            mDrawerList.setOnItemClickListener(new SlideMenuClickListener());
      
          // setting the nav drawer list adapter
          adapter = new NavDrawerListAdapter(getApplicationContext(),
                  navDrawerItems);
          mDrawerList.setAdapter(adapter);
      
          // enabling action bar app icon and behaving it as toggle button
          getActionBar().setDisplayHomeAsUpEnabled(true);
          getActionBar().setHomeButtonEnabled(true);
              mDrawerToggle = new ActionBarDrawerToggle(this, mDrawerLayout,
                  R.drawable.ic_drawer, // nav menu toggle icon
                  R.string.app_name, // nav drawer open - description for
                                      // accessibility
                  R.string.app_name // nav drawer close - description for
                                      // accessibility
          ) {
              public void onDrawerClosed(View view) {
                  getActionBar().setTitle(mTitle);
                  // calling onPrepareOptionsMenu() to show action bar icons
                  invalidateOptionsMenu();
              }
      
              public void onDrawerOpened(View drawerView) {
                  getActionBar().setTitle(mDrawerTitle);
                  // calling onPrepareOptionsMenu() to hide action bar icons//
                  // invalidateOptionsMenu();
              }
          };
          mDrawerLayout.setDrawerListener(mDrawerToggle);
      
          if (savedInstanceState == null) {
              // on first time display view for first nav item
              displayView(0);
          }
       private void displayView(int position) {
          // update the main content by replacing fragments
          switch (position) {
          case 0:
      
          Toast.makeText(MainActivity.this, ..... + " was selected",Toast.LENGTH_LONG).show();
              break;
          default:
      
              break;
       }
       }
      
       private class SlideMenuClickListener implements
              ListView.OnItemClickListener {
          @Override
          public void onItemClick(AdapterView<?> parent, View view, int position,
                  long id) {
              // display view for selected nav drawer item
              displayView(position);
          }
      }
      
          @Override
      public boolean onCreateOptionsMenu(Menu menu) {
          getMenuInflater().inflate(R.menu.main, menu);
          return true;
      }
      
      @Override
      public boolean onOptionsItemSelected(MenuItem item) {
          // toggle nav drawer on selecting action bar app icon/title
          if (mDrawerToggle.onOptionsItemSelected(item)) {
              return true;
          }
          // Handle action bar actions click
          switch (item.getItemId()) {
          case R.id.action_settings:
              return true;
          default:
              return super.onOptionsItemSelected(item);
          }
      }
      

      MainDrawerItem.class

       public class MainDrawerItem {
       private String title;
      public MainDrawerItem(){
      }
      
      public MainDrawerItem(String title){
          this.title = title;
      
      }
      
      public String getTitle(){
          return this.title;
      }
      }
      

      对于适配器类

      public class NavDrawerListAdapter extends BaseAdapter {
      
      private Context context;
      private ArrayList<MainDrawerItem> navDrawerItems;
      
      public NavDrawerListAdapter(Context context, ArrayList<MainDrawerItem> navDrawerItems){
          this.context = context;
          this.navDrawerItems = navDrawerItems;
      }
      @Override
      public Object getItem(int position) {       
          return navDrawerItems.get(position);
      }
      
      @Override
      public long getItemId(int position) {
          return position;
      }
      
      @Override
      public View getView(int position, View convertView, ViewGroup parent) {
          if (convertView == null) {
              LayoutInflater mInflater = (LayoutInflater)
                      context.getSystemService(Activity.LAYOUT_INFLATER_SERVICE);
              convertView = mInflater.inflate(R.layout.drawer_list_item, null);
          }
      
          TextView txtTitle = (TextView) convertView.findViewById(R.id.title);      
          txtTitle.setText(navDrawerItems.get(position).getTitle());
      
          return convertView;
      }
      
      }
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2017-12-16
        • 2015-11-04
        • 2015-12-22
        相关资源
        最近更新 更多