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(遵循官方示例)。列表已填充,但其项不会侦听单击事件。如果找不到更好的解决方案,我将使用片段。请添加您正在使用的布局示例