2013-05-02 103 views
1

當我創建單獨的項目以通過遵循this tutorial的Android操作欄創建Tab佈局時,它工作正常。使用ActionBar和Fragment的Android中的標籤佈局

但是,當我嘗試通過單擊按鈕加載主活動中的選項卡式活動時,該應用程序會崩潰。我從主要業務是這樣的選項卡式活動調用的onCreate:

Button ListBtn = (Button) findViewById(R.id.main_btn); 
ListBtn.setOnClickListener(new OnClickListener() { 
    @Override 
    public void onClick(View v) { 
     startActivity(new Intent(Main.this, Tabbed.class)); 
    } 
}); 

logcat的

05-02 16:43:39.879: D/gralloc_goldfish(4337): Emulator without GPU emulation detected. 
05-02 16:43:39.909: I/dalvikvm(4337): threadid=3: reacting to signal 3 
05-02 16:43:39.929: I/dalvikvm(4337): Wrote stack traces to '/data/anr/traces.txt' 
05-02 16:43:42.309: D/AndroidRuntime(4337): Shutting down VM 
05-02 16:43:42.309: W/dalvikvm(4337): threadid=1: thread exiting with uncaught exception (group=0x409c01f8) 
05-02 16:43:42.339: E/AndroidRuntime(4337): FATAL EXCEPTION: main 
05-02 16:43:42.339: E/AndroidRuntime(4337): java.lang.RuntimeException: Unable to start activity ComponentInfo{com.example.T/com. 
AppName.Tabbed}: 
java.lang.NullPointerException 
05-02 16:43:42.339: E/AndroidRuntime(4337):  at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1956) 
05-02 16:43:42.339: E/AndroidRuntime(4337):  at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:1981) 
05-02 16:43:42.339: E/AndroidRuntime(4337):  at android.app.ActivityThread.access$600(ActivityThread.java:123) 
05-02 16:43:42.339: E/AndroidRuntime(4337):  at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1147) 
05-02 16:43:42.339: E/AndroidRuntime(4337):  at android.os.Handler.dispatchMessage(Handler.java:99) 
05-02 16:43:42.339: E/AndroidRuntime(4337):  at android.os.Looper.loop(Looper.java:137) 
05-02 16:43:42.339: E/AndroidRuntime(4337):  at android.app.ActivityThread.main(ActivityThread.java:4424) 
05-02 16:43:42.339: E/AndroidRuntime(4337):  at java.lang.reflect.Method.invokeNative(Native Method) 
05-02 16:43:42.339: E/AndroidRuntime(4337):  at java.lang.reflect.Method.invoke(Method.java:511) 
05-02 16:43:42.339: E/AndroidRuntime(4337):  at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:784) 
05-02 16:43:42.339: E/AndroidRuntime(4337):  at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:551) 
05-02 16:43:42.339: E/AndroidRuntime(4337):  at dalvik.system.NativeStart.main(Native Method) 
05-02 16:43:42.339: E/AndroidRuntime(4337): Caused by: java.lang.NullPointerException 
05-02 16:43:42.339: E/AndroidRuntime(4337):  at packageName.Tabbed.onCreate(Tabbed.java:17) 
05-02 16:43:42.339: E/AndroidRuntime(4337):  at android.app.Activity.performCreate(Activity.java:4465) 
05-02 16:43:42.339: E/AndroidRuntime(4337):  at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1049) 
05-02 16:43:42.339: E/AndroidRuntime(4337):  at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1920) 
05-02 16:43:42.339: E/AndroidRuntime(4337):  ... 11 more 
05-02 16:43:42.979: I/dalvikvm(4337): threadid=3: reacting to signal 3 
05-02 16:43:43.009: I/dalvikvm(4337): Wrote stack traces to '/data/anr/traces.txt' 
05-02 16:43:43.319: I/dalvikvm(4337): threadid=3: reacting to signal 3 
05-02 16:43:43.349: I/dalvikvm(4337): Wrote stack traces to '/data/anr/traces.txt' 

onCreate方法

public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 

     ActionBar actionBar = getActionBar(); 

     actionBar.setNavigationMode(ActionBar.NAVIGATION_MODE_TABS); 

     String label1 = getResources().getString(R.string.label1); 
     Tab tab = actionBar.newTab(); 
     tab.setText(label1); 
     TabListener<Tab1Fragment> tl = new TabListener<Tab1Fragment>(this, 
       label1, Tab1Fragment.class); 
     tab.setTabListener(tl); 
     actionBar.addTab(tab); 

     String label2 = getResources().getString(R.string.label2); 
     tab = actionBar.newTab(); 
     tab.setText(label2); 
     TabListener<Tab2Fragment> tl2 = new TabListener<Tab2Fragment>(this, 
       label2, Tab2Fragment.class); 
     tab.setTabListener(tl2); 
     actionBar.addTab(tab); 

    } 
+0

你能提供你在logcat中看到錯誤消息? – oakes 2013-05-02 13:32:10

+1

@oakleaf logCat新增 – Noor 2013-05-02 13:36:03

+0

嗯,Tabbed.java的第17行是什麼? – oakes 2013-05-02 13:39:45

回答

1

看來,getActionBar()被返回null。 嘗試編輯您的AndroidManifest.xml,使其具有 <uses-sdk android:minSdkVersion="11" />。除非您使用 ActionBarSherlock,否則操作欄無法在較舊的SDK上使用。

調用getActionBar()之前添加以下行:

getWindow().requestFeature(Window.FEATURE_ACTION_BAR);

+1

最小SDK版本已經設置爲11這裏是代碼'' – Noor 2013-05-02 14:00:56

+0

有趣。您是否介意在Tabbed.java中發佈整個onCreate方法,還是與本教程中的方法相同? – oakes 2013-05-02 14:02:14

+1

@aokleaf Oncreate方法添加到問題中,請參閱 – Noor 2013-05-02 14:13:42