Android 导航抽屉:抽屉切换不工作,抽屉列表未侦听

Android 导航抽屉:抽屉切换不工作,抽屉列表未侦听,android,android-navigation,Android,Android Navigation,我正在尝试使用导航抽屉,我已经遵循了官方开发者网站的每一步,但我仍然有两个问题: 抽屉切换,按下时,完全不起任何作用 抽屉中的ListView项未接收单击事件 其他一切都可以工作(即使是打开/关闭的侦听器)。你能帮我找出错误吗 import android.support.v4.app.ActionBarDrawerToggle; import android.support.v4.app.FragmentActivity; import android.support.v4.widget.

我正在尝试使用导航抽屉,我已经遵循了官方开发者网站的每一步,但我仍然有两个问题:

  • 抽屉切换,按下时,完全不起任何作用
  • 抽屉中的ListView项未接收单击事件
其他一切都可以工作(即使是打开/关闭的侦听器)。你能帮我找出错误吗

import android.support.v4.app.ActionBarDrawerToggle;
import android.support.v4.app.FragmentActivity;
import android.support.v4.widget.DrawerLayout;    

public class ActTimerList extends FragmentActivity {


private DrawerLayout mDrawerLayout;
private ListView mDrawerList;
private ActionBarDrawerToggle mDrawerToggle;


@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.act_timer_list);

            ---
    configureActionBarAndNavigationDrawer();

    retrieveStuff();
}

private void configureActionBarAndNavigationDrawer(){

    mDrawerLayout = (DrawerLayout) findViewById(R.id.drawer_layout);
    mDrawerList = (ListView) findViewById(R.id.drawer_list);
    mDrawerToggle = new ActionBarDrawerToggle(this, /* host Activity */
            mDrawerLayout, /* DrawerLayout object */
            R.drawable.ic_drawer, /* nav drawer icon to replace 'Up' caret */
            R.string.drawer_open, /* "open drawer" description */
            R.string.drawer_close /* "close drawer" description */
            ) {

        /** Called when a drawer has settled in a completely closed state. */
        public void onDrawerClosed(View view) {
            //Some code that works
        }

        /** Called when a drawer has settled in a completely open state. */
        public void onDrawerOpened(View drawerView) {
        }
    };
    // Set the drawer toggle as the DrawerListener
    mDrawerLayout.setDrawerListener(mDrawerToggle);
    mDrawerList.setOnItemClickListener(new ListView.OnItemClickListener() {

        @Override
        public void onItemClick(AdapterView<?> parent, View view, int position,
                long id) {

            Log.d("Drawer", "Stuff clicked: " + position);  
            mDrawerList.setItemChecked(position, true);
            getActionBar().setTitle(stuff[position].name);
            mDrawerLayout.closeDrawer(mDrawerList);


        }
    });


    getActionBar().setDisplayHomeAsUpEnabled(true);
    getActionBar().setHomeButtonEnabled(true);
}


@Override
protected void onPostCreate(Bundle savedInstanceState) {
    super.onPostCreate(savedInstanceState);
    // Sync the toggle state after onRestoreInstanceState has occurred.
    mDrawerToggle.syncState();
}

@Override
public void onConfigurationChanged(Configuration newConfig) {
    super.onConfigurationChanged(newConfig);
    mDrawerToggle.onConfigurationChanged(newConfig);
}

@Override
public boolean onOptionsItemSelected(MenuItem item) {
    // Pass the event to ActionBarDrawerToggle, if it returns
    // true, then it has handled the app icon touch event
    if (mDrawerToggle.onOptionsItemSelected(item)) {
        return true;
    }
    // Handle your other action bar items...

    return super.onOptionsItemSelected(item);
}



private void retrieveStuff() {

            query.findInBackground(new FindCallback<ParseObject>() { //Parse API to retrieve stuff, async
        public void done(List<ParseObject> stuffList, ParseException e) { //Callback for when the query completes
            if (e == null) {
            //This works, stuff is being loaded and the adapter is set correctly
                mDrawerList.setAdapter(new StuffAdapter(context,
                        R.layout.item_stuff, stuff));
                ---
            } 
        }
    });
}
导入android.support.v4.app.ActionBarDrawerToggle;
导入android.support.v4.app.FragmentActivity;
导入android.support.v4.widget.DrawerLayout;
公共类ActTimerList扩展了FragmentActivity{
私人抽屉布局mDrawerLayout;
私有列表视图mDrawerList;
私有操作bardrawertoggle mDrawerToggle;
@凌驾
创建时受保护的void(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.act\u计时器\u列表);
---
配置ActionBarandNavigationDrawer();
retrieveStuff();
}
私有void配置ActionBarandNavigationDrawer(){
mDrawerLayout=(抽屉布局)findViewById(R.id.抽屉布局);
mDrawerList=(ListView)findViewById(R.id.drawer\u列表);
mDrawerToggle=newactionbardrawertoggle(此,/*主机活动*/
mDrawerLayout,/*抽屉布局对象*/
R.drawable.ic_抽屉,/*导航抽屉图标替换“Up”插入符号*/
R.string.drawer\u open,/*“open drawer”说明*/
R.string.drawer\u close/*“close drawer”说明*/
) {
/**当抽屉处于完全关闭状态时调用*/
公共无效onDrawerClosed(视图){
//一些有效的代码
}
/**当抽屉处于完全打开状态时调用*/
打开图纸上的公共空白(视图抽屉视图){
}
};
//将抽屉开关设置为抽屉定位器
mDrawerLayout.setDrawerListener(mDrawerToggle);
mDrawerList.setOnItemClickListener(新的ListView.OnItemClickListener(){
@凌驾
public void onItemClick(AdapterView父视图、视图、整型位置、,
长id){
Log.d(“抽屉”,“点击物品:+位置”);
mDrawerList.setItemChecked(位置,true);
getActionBar().setTitle(stuff[position].name);
mDrawerLayout.closeDrawer(mDrawerList);
}
});
getActionBar().setDisplayHomeAsUpEnabled(true);
getActionBar().setHomeButtonEnabled(true);
}
@凌驾
后期创建时受保护的空(捆绑包savedInstanceState){
super.onPostCreate(savedInstanceState);
//在onRestoreInstanceState发生后同步切换状态。
mDrawerToggle.syncState();
}
@凌驾
公共无效OnConfiguration已更改(配置newConfig){
super.onConfigurationChanged(newConfig);
mDrawerToggle.onConfigurationChanged(newConfig);
}
@凌驾
公共布尔值onOptionsItemSelected(菜单项项){
//如果返回,则将事件传递给ActionBarDrawerToggle
//则它已处理应用程序图标触摸事件
如果(MDRAWERTOGLE.onOptionsItemSelected(项目)){
返回true;
}
//处理其他操作栏项。。。
返回super.onOptionsItemSelected(项目);
}
私有void retrieveStuff(){
findInBackground(新的FindCallback(){//Parse API以检索内容,异步
public void done(List stuffList,ParseException e){//查询完成时的回调
如果(e==null){
//这是可行的,正在加载内容并且适配器设置正确
mDrawerList.setAdapter(新的StuffAdapter(上下文、,
R.layout.item_stuff,stuff));
---
} 
}
});
}

解释错误:什么不起作用

以下是我的一些片段:

    mDrawerToggle = new ActionBarDrawerToggle(
            this, 
            mDrawerLayout, 
            R.drawable.ic_drawer, 
            R.string.drawer_open,
            R.string.drawer_close) {

        public void onDrawerClosed(View view) {
            getSupportActionBar().setTitle(mTitle);
            supportInvalidateOptionsMenu();
        }

        public void onDrawerOpened(View view) {
            getSupportActionBar().setTitle(mDrawerTitle);
            supportInvalidateOptionsMenu();
        }
    };

    mDrawerLayout.setDrawerListener(mDrawerToggle);
关于ListView侦听器:

    mDrawerList.setOnItemClickListener(new DrawerItemClickListener());
    private class DrawerItemClickListener implements ListView.OnItemClickListener {
         @Override
         public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
              selectItem(position);
         }
    }
和听众:

    mDrawerList.setOnItemClickListener(new DrawerItemClickListener());
    private class DrawerItemClickListener implements ListView.OnItemClickListener {
         @Override
         public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
              selectItem(position);
         }
    }
私有类DrawerItemClickListener实现ListView.OnItemClickListener{
@凌驾
public void onItemClick(AdapterView父对象、视图、整型位置、长id){
选择项目(位置);
}
}
然后选择Item():

private void selectItem(内部位置){
FragmentManager FragmentManager=getSupportFragmentManager();
FragmentRnsAction=fragmentManager.beginTransaction();
开关(位置){
案例0:
打破
案例1:
打破
案例2:
打破
案例3:
打破
违约:
打破
}
mDrawerList.setItemChecked(位置,true);
mDrawerLayout.closeDrawer(mDrawerList);
}

<>代码> 我不知道你的通俗导航抽屉在哪里。可能是问题吗?考虑在抽屉布局初始化

结尾的片段。
getFragmentManager().beginTransaction().add(R.id.left_drawer, new MenuFragment(), "menu").commit();

<代码> MeNuthFrace是我编写抽屉UI的自定义片段。实现取决于您。如果菜单中有一个简单的项目,请考虑使用<代码> ListFrace 活动的布局示例应包括:

<?xml version="1.0" encoding="utf-8"?>
<android.support.v4.widget.DrawerLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:id="@+id/drawer_layout"
    tools:context=".activities.MainActivity">

    <!-- Your awesome content here -->

    <FrameLayout android:id="@+id/left_drawer"
              android:layout_width="240dp"
              android:layout_height="match_parent"
              android:layout_gravity="start"
              android:choiceMode="singleChoice" />
</android.support.v4.widget.DrawerLayout>

在选择方法中,您没有正确启动片段

private void selectItem(int position)  
{    
     FragmentManager fragmentManager = getSupportFragmentManager();

     fragmentTrnsaction = fragmentManager.beginTransaction();
------>>>使用后

fragmentTrnsaction.add() or replace() method.

问题中解释了错误。我没有使用片段填充抽屉,只是一个简单的listView(遵循官方示例)。列表已填充,但其项不会侦听单击事件。如果找不到更好的解决方案,我将使用片段。请添加您正在使用的布局示例