【发布时间】:2014-09-15 07:13:31
【问题描述】:
我正在创建一个应用程序,它要求所有活动都使用相同的导航抽屉。为此,我创建了一个扩展 Activity 的类(需要子类)并在那里编写 Navigation Drawer 的代码。
public class NavigationDrawerClass extends Activity {
String [] names = new String[]{"Rohan", "Muthu","Rishi"};
private ActionBarDrawerToggle mDrawerToggle;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.navigation_drawer_class);
DrawerLayout drawerLayout = (DrawerLayout) findViewById(R.id.drawer_layout);
ListView list = (ListView) findViewById(R.id.left_drawer);
list.setAdapter(new ArrayAdapter<String>(NavigationDrawerClass.this, android.R.layout.simple_list_item_1, names));
// enable ActionBar app icon to behave as action to toggle nav drawer
getActionBar().setDisplayHomeAsUpEnabled(true);
getActionBar().setHomeButtonEnabled(true);
mDrawerToggle = new ActionBarDrawerToggle(
NavigationDrawerClass.this, /* host Activity */
drawerLayout, /* DrawerLayout object */
R.drawable.ic_drawer, /* nav drawer image to replace 'Up' caret */
R.string.open_drawer , /* "open drawer" description for accessibility */
R.string.close_drawer /* "close drawer" description for accessibility */
) {
public void onDrawerClosed(View view) {
getActionBar().setTitle("Drawer Closed");
invalidateOptionsMenu(); // creates call to onPrepareOptionsMenu()
}
public void onDrawerOpened(View drawerView) {
getActionBar().setTitle("Drawer Opened");
invalidateOptionsMenu(); // creates call to onPrepareOptionsMenu()
}
};
drawerLayout.setDrawerListener(mDrawerToggle);
}
@Override
protected void onPostCreate(Bundle savedInstanceState) {
super.onPostCreate(savedInstanceState);
mDrawerToggle.syncState();
}
@Override
public void onConfigurationChanged(Configuration newConfig) {
super.onConfigurationChanged(newConfig);
// Pass any configuration change to the drawer toggle
mDrawerToggle.onConfigurationChanged(newConfig);
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
// The action bar home/up action should open or close the drawer.
// ActionBarDrawerToggle will take care of this.
if (mDrawerToggle.onOptionsItemSelected(item)) {
return true;
}
return super.onOptionsItemSelected(item);
}
@Override
public void setTitle(CharSequence title) {
getActionBar().setTitle("Navigation Drawer Example");
}
}
然后我尝试在其他一些类中扩展它,例如-public class MyActivity extends NavigationDrawerClass,但导航抽屉不起作用。点击抽屉图标或滑动都没有任何影响。如果我尝试将 NavigationDrawerClass 作为独立类运行,那么它运行完美。我必须采取哪些额外步骤才能使导航抽屉可用于所有类。
【问题讨论】:
-
参考这个链接:androidhive.info/2013/11/…
-
@Prag'sshi 我已经说过,当我使导航类独立时它可以工作,但当我尝试在其他类中扩展它时它不工作。
-
那将是问题所在。
setContentView()将当前设置为活动布局的任何内容替换为您指定的新布局。也就是说,当您在扩展的活动中调用它时,它会清除您在基类中完成的 DrawerLayout 设置。 -
@MikeM。那怎么办呢?
-
@MikeM。在 valentin 的回答下查看我的评论并建议我应该怎么做。
标签: android inheritance navigation-drawer android-navigation