1
我已经以编程方式实现了Navigation Drawer
。当我点击左上角的图标时屏幕会变暗(当抽屉确实滑入时的动画),但抽屉根本不会滑动,而其他所有功能都可以正常工作。导航抽屉不滑动
这是我的代码。
public class MainActivity extends Activity {
private static final String TAG = "MAIN_ACTIVITY";
private DrawerLayout mDrawerLayout;
public static ArrayList<String> mOptions=new ArrayList<String>();
// ListView represents Navigation Drawer
private ListView mDrawerList;
private ActionBarDrawerToggle mDrawerToggle;
private CharSequence mTitle;
private MainActivityLayout mainActivityLayout;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
mainActivityLayout=new MainActivityLayout(this,null);
setContentView(mainActivityLayout);//changed this
mOptions.add("Search");
mOptions.add("Inbox");
mOptions.add("Shout-A-Loud");
mOptions.add("Saved Profiles");
mOptions.add("Profile viewers");// premium feature. Will display profile views but not viewers.
mOptions.add("Settings");
mOptions.add("App Info");
mDrawerLayout=(DrawerLayout) mainActivityLayout;//this changed
mDrawerList=(ListView) new ListViewCustom(this,null);
ArrayAdapter<String> adapter = new ArrayAdapter<String>(getBaseContext(),
R.layout.drawer_list_item, mOptions);
mDrawerList.setAdapter(adapter);
mDrawerList.setOnItemClickListener(new DrawerItemClickListener());
getActionBar().setDisplayHomeAsUpEnabled(true);
getActionBar().setHomeButtonEnabled(true);
mDrawerToggle = new ActionBarDrawerToggle(
this,
mDrawerLayout,
R.drawable.ic_drawer,
R.string.drawer_open,
R.string.drawer_close
) {
public void onDrawerClosed(View view) {
super.onDrawerClosed(view);
mTitle="Social Geek";
getActionBar().setTitle(mTitle);
invalidateOptionsMenu();
}
public void onDrawerOpened(View view) {
super.onDrawerOpened(view);
mTitle="Select";
getActionBar().setTitle(mTitle);
invalidateOptionsMenu(); // creates call to onPrepareOptionsMenu()
}
};
mDrawerLayout.setDrawerListener(mDrawerToggle);
getActionBar().setDisplayHomeAsUpEnabled(true);
getActionBar().setHomeButtonEnabled(true);
if (savedInstanceState == null) {
selectItem(0);
}
}
二等
public class MainActivityLayout extends DrawerLayout{
static Context context;
static DrawerLayout DrawerLayoutCustom;
static ListViewCustom ListViewCustom;
public MainActivityLayout(Context context,AttributeSet attr) {
super(context,attr);
MainActivityLayout.context=context;
ListViewCustom=new ListViewCustom(context,null);
LayoutParams layoutParams=new LayoutParams(LayoutParams.MATCH_PARENT,LayoutParams.MATCH_PARENT);
setLayoutParams(layoutParams);
addView(ListViewCustom);
initializeEverything(context, null);
}
三等
public class ListViewCustom extends ListView{
static final int LISTVIEW_CUSTOM=0;
public ListViewCustom(Context context,AttributeSet attrs) {
super(context,attrs);
DrawerLayout.LayoutParams layoutParams=
new DrawerLayout.LayoutParams(240,LayoutParams.MATCH_PARENT);
layoutParams.gravity=Gravity.START;
setBackgroundColor(111);
setDivider(getResources().getDrawable(android.R.color.transparent));
setChoiceMode(CHOICE_MODE_SINGLE);
setLayoutParams(layoutParams);
}
}
事情是。我想我的MainActivity的布局是以编程方式创建而不是XML。但是类的嵌套混淆了我。所以我必须创建一个'扩展DrawerLayout'然后'addView()'的每个类的类? –
你甚至不需要扩展DrawerLayout。只需在代码中创建一个DrawerLayout,然后添加FrameLayout(内容框架)和ListView。 –
谢谢菲利普。遵循这最后的建议,我做到了!我做的是 mainActivityLayout = new MainActivityLayout(this,null); mDrawerList = new ListViewCustom(this,null); mDrawerLayout = new DrawerLayout(this); mDrawerLayout.addView(mainActivityLayout); mDrawerLayout.addView(mDrawerList); setContentView(mDrawerLayout) 仍然面临小问题但无后顾之忧,再次感谢 –