我正在尝试创建一个导航抽屉活动,所以我可以扩展该活动,并在所有活动中使用菜单,遵循这个问题
Link中给出的答案,但我的测试应用程序不断崩溃,这是我的代码:
BaseActivity.java
public class BaseActivity extends Activity { public DrawerLayout drawerLayout; public ListView drawerList; public String[] layers; private ActionBarDrawerToggle drawerToggle; protected void onCreate(Bundle savedInstanceState) { // R.id.drawer_layout should be in every activity with exactly the same // id. drawerLayout = (DrawerLayout) findViewById(R.id.drawer_layout); drawerToggle = new ActionBarDrawerToggle((Activity) this,drawerLayout,R.drawable.ic_drawer,0) { public void onDrawerClosed(View view) { getActionBar().setTitle(R.string.hello_world); } public void onDrawerOpened(View drawerView) { getActionBar().setTitle(R.string.hello_world); } }; drawerLayout.setDrawerListener(drawerToggle); getActionBar().setDisplayHomeAsUpEnabled(true); getActionBar().setHomeButtonEnabled(true); layers = getResources().getStringArray(R.array.planets_array); drawerList = (ListView) findViewById(R.id.left_drawer); drawerList.setAdapter(new ArrayAdapter<String>(this,R.layout.drawer_list_item,android.R.id.text1,layers)); } @Override public boolean onOptionsItemSelected(MenuItem item) { if (drawerToggle.onOptionsItemSelected(item)) { return true; } return super.onOptionsItemSelected(item); } @Override protected void onPostCreate(Bundle savedInstanceState) { super.onPostCreate(savedInstanceState); drawerToggle.syncState(); } @Override public void onConfigurationChanged(Configuration newConfig) { super.onConfigurationChanged(newConfig); drawerToggle.onConfigurationChanged(newConfig); } }
MainActivity.java
public class MainActivity extends BaseActivity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_profile); } }
activity_profile.xml
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" android:paddingBottom="@dimen/activity_vertical_margin" android:paddingLeft="@dimen/activity_horizontal_margin" android:paddingRight="@dimen/activity_horizontal_margin" android:paddingTop="@dimen/activity_vertical_margin" tools:context=".ProfileActivity" > <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="@string/hello_world" /> </RelativeLayout>
logcat的
03-03 01:22:18.031: D/AndroidRuntime(27902): Shutting down VM 03-03 01:22:18.031: W/dalvikvm(27902): threadid=1: thread exiting with uncaught exception (group=0x2b542210) 03-03 01:22:18.041: E/AndroidRuntime(27902): FATAL EXCEPTION: main 03-03 01:22:18.041: E/AndroidRuntime(27902): java.lang.RuntimeException: Unable to start activity ComponentInfo{com.example.slider/com.example.slider.MainActivity}: java.lang.NullPointerException 03-03 01:22:18.041: E/AndroidRuntime(27902): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1967) 03-03 01:22:18.041: E/AndroidRuntime(27902): at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:1992) 03-03 01:22:18.041: E/AndroidRuntime(27902): at android.app.ActivityThread.access$600(ActivityThread.java:127) 03-03 01:22:18.041: E/AndroidRuntime(27902): at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1158) 03-03 01:22:18.041: E/AndroidRuntime(27902): at android.os.Handler.dispatchMessage(Handler.java:99) 03-03 01:22:18.041: E/AndroidRuntime(27902): at android.os.Looper.loop(Looper.java:137) 03-03 01:22:18.041: E/AndroidRuntime(27902): at android.app.ActivityThread.main(ActivityThread.java:4441) 03-03 01:22:18.041: E/AndroidRuntime(27902): at java.lang.reflect.Method.invokeNative(Native Method) 03-03 01:22:18.041: E/AndroidRuntime(27902): at java.lang.reflect.Method.invoke(Method.java:511) 03-03 01:22:18.041: E/AndroidRuntime(27902): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:784) 03-03 01:22:18.041: E/AndroidRuntime(27902): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:551) 03-03 01:22:18.041: E/AndroidRuntime(27902): at dalvik.system.NativeStart.main(Native Method) 03-03 01:22:18.041: E/AndroidRuntime(27902): Caused by: java.lang.NullPointerException 03-03 01:22:18.041: E/AndroidRuntime(27902): at com.example.slider.BaseActivity.onCreate(BaseActivity.java:35) 03-03 01:22:18.041: E/AndroidRuntime(27902): at com.example.slider.MainActivity.onCreate(MainActivity.java:12) 03-03 01:22:18.041: E/AndroidRuntime(27902): at android.app.Activity.performCreate(Activity.java:4465) 03-03 01:22:18.041: E/AndroidRuntime(27902): at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1049) 03-03 01:22:18.041: E/AndroidRuntime(27902): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1931) 03-03 01:22:18.041: E/AndroidRuntime(27902): ... 11 more
解决方法
在主要的活动中,你必须在setContentView()之后调用super.onCreate(savedInstanceState)