滑动导航抽屉不处理菜单项android的点击

时间:2014-09-04 00:26:03

标签: android

我正在尝试使用应用中的滑动导航抽屉。但是它似乎没有处理OnItemClick方法。当我点击一个项目时没有任何反应。我怎么能让它工作?谢谢

// MainActivity

 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>

3 个答案:

答案 0 :(得分:3)

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

答案 1 :(得分:1)

这样做简单吗:在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);
}

答案 2 :(得分:0)

对于左侧菜单抽屉完成简单,您可以尝试以下简单....

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;
}

}