我正在尝试使用导航抽屉,我已经按照官方开发者网站的每一步,仍然有两个问题:
其他所有工作(甚至是开放/关闭监听器)。你能帮我找到错误吗?
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));
---
}
}
});
}
答案 0 :(得分:1)
解释错误:什么不能正常工作?
这里有一些我的片段:
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 Listener:
mDrawerList.setOnItemClickListener(new DrawerItemClickListener());
和听众:
private class DrawerItemClickListener implements ListView.OnItemClickListener {
@Override
public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
selectItem(position);
}
}
selectItem():
private void selectItem(int position) {
FragmentManager fragmentManager = getSupportFragmentManager();
fragmentTrnsaction = fragmentManager.beginTransaction();
switch (position) {
case 0:
<some code>
break;
case 1:
<some code>
break;
case 2:
<some code>
break;
case 3:
<some code>
break;
default:
break;
}
mDrawerList.setItemChecked(position, true);
mDrawerLayout.closeDrawer(mDrawerList);
}
答案 1 :(得分:0)
我没看到你流行的导航抽屉在哪里。可能这是问题所在?在抽屉布局初始化结束时考虑使用以下片段
getFragmentManager().beginTransaction().add(R.id.left_drawer, new MenuFragment(), "menu").commit();
MenuFragment
是我的自定义片段,用于准备抽屉ui。实施取决于您。如果您在菜单中有一组简单的项目,请考虑使用ListFragment
。
您的活动的布局示例应该包含:
<?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>
答案 2 :(得分:0)
在您的选择方法中,您没有正确启动片段
private void selectItem(int position)
{
FragmentManager fragmentManager = getSupportFragmentManager();
fragmentTrnsaction = fragmentManager.beginTransaction();
------&GT;&GT;&GT;使用完毕后
fragmentTrnsaction.add() or replace() method.