2013-09-29 142 views
1

我在我的MainActivity類中有一個方法,我可以從不同的活動類訪問實例化所有其他活動的應用程序欄中的Tabs。actionBar.addTab拋出NullPointerException

然而,當我正在從一個類調用這個函數在MainActivity類的thwroing一個java.lang.NullPointerException

我的功能在MainActivity.Java

public void initiateMenuTabs(ActionBar actionBar) { 

    try { 
     actionBar.setDisplayShowTitleEnabled(false); 
     actionBar.setDisplayUseLogoEnabled(true); 

     actionBar.setNavigationMode(ActionBar.NAVIGATION_MODE_TABS); 

     ActionBar.TabListener tabListener = new ActionBar.TabListener() { 

      @Override 
      public void onTabUnselected(Tab arg0, FragmentTransaction arg1) { 
       // TODO Auto-generated method stub 

      } 

      @Override 
      public void onTabSelected(Tab tab, FragmentTransaction arg1) { 
       int tabPosition = tab.getPosition(); 
       switch (tabPosition) { 
       case 0: 
        setContentView(R.layout.event_feed); 
        break; 
       case 1: { 
        Intent startClassActivity = new Intent(MainActivity.this, 
          ClassWide.class); 
        startActivity(startClassActivity); 
        break; 
       } 
       case 2: 
        setContentView(R.layout.event_feed); 
        break; 
       } 

      } 

      @Override 
      public void onTabReselected(Tab arg0, FragmentTransaction arg1) { 
       // TODO Auto-generated method stub 

      } 
     }; 

     actionBar.addTab(actionBar.newTab().setText("Event Feed") 
       .setIcon(R.drawable.ic_action_alarms) 
       .setTabListener(tabListener)); 
     actionBar.addTab(actionBar.newTab().setText("Wide") 
       .setIcon(R.drawable.ic_action_Wide) 
       .setTabListener(tabListener)); 
     actionBar.addTab(actionBar.newTab().setText("Report") 
       .setIcon(R.drawable.ic_action_location_found) 
       .setTabListener(tabListener)); 
    } catch (Exception e) { 
     Log.getStackTraceString(e.getCause().getCause()); 

    } 

} 

功能從ClassWide.Java

protected void onCreate(final Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.wide_view); 
    MainActivity cObj = new MainActivity(); 
    cObj.initiateMenuTabs(getActionBar()); 
      .... .... 
調用

LogCat窗口顯示:

09-29 15:21:09.217: E/AndroidRuntime(2549): FATAL EXCEPTION: main 
09-29 15:21:09.217: E/AndroidRuntime(2549): java.lang.RuntimeException: Unable to start activity ComponentInfo{com.helloworld.projectone/com.helloworld.projectone.ClassWide}: java.lang.NullPointerException 
09-29 15:21:09.217: E/AndroidRuntime(2549):  at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2211) 
09-29 15:21:09.217: E/AndroidRuntime(2549):  at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2261) 
09-29 15:21:09.217: E/AndroidRuntime(2549):  at android.app.ActivityThread.access$600(ActivityThread.java:141) 
09-29 15:21:09.217: E/AndroidRuntime(2549):  at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1256) 
09-29 15:21:09.217: E/AndroidRuntime(2549):  at android.os.Handler.dispatchMessage(Handler.java:99) 
09-29 15:21:09.217: E/AndroidRuntime(2549):  at android.os.Looper.loop(Looper.java:137) 
09-29 15:21:09.217: E/AndroidRuntime(2549):  at android.app.ActivityThread.main(ActivityThread.java:5103) 
09-29 15:21:09.217: E/AndroidRuntime(2549):  at java.lang.reflect.Method.invokeNative(Native Method) 
09-29 15:21:09.217: E/AndroidRuntime(2549):  at java.lang.reflect.Method.invoke(Method.java:525) 
09-29 15:21:09.217: E/AndroidRuntime(2549):  at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:737) 
09-29 15:21:09.217: E/AndroidRuntime(2549):  at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:553) 
09-29 15:21:09.217: E/AndroidRuntime(2549):  at dalvik.system.NativeStart.main(Native Method) 
09-29 15:21:09.217: E/AndroidRuntime(2549): Caused by: java.lang.NullPointerException 
09-29 15:21:09.217: E/AndroidRuntime(2549):  at com.helloworld.projectone.MainActivity.initiateMenuTabs(MainActivity.java:79) 
09-29 15:21:09.217: E/AndroidRuntime(2549):  at com.helloworld.projectone.ClassWide.onCreate(ClassWide.java:21) 
09-29 15:21:09.217: E/AndroidRuntime(2549):  at android.app.Activity.performCreate(Activity.java:5133) 
09-29 15:21:09.217: E/AndroidRuntime(2549):  at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1087) 
09-29 15:21:09.217: E/AndroidRuntime(2549):  at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2175) 
09-29 15:21:09.217: E/AndroidRuntime(2549):  ... 11 more 
+0

有什麼異常報告任何其他活動?將其編輯到您的問題中。 – tbodt

+0

我如何獲得例外報告?你的意思是logCat輸出? – Maven

+0

補充,現在檢查plz。 – Maven

回答

1

您正在實例化另一個活動中的Android活動。一個Activity不僅僅是一個簡單的類,你需要做的是從你想要的任何Activity調用你的方法,就是定義你的BaseActivity,它包含所有活動共有的方法,並擴展它,而不是擴展一般活動類:

public class BaseActivity extends Activity { 

    public void initiateMenuTabs(ActionBar actionBar) { 
     ....//your code 
    } 
} 

然後擴展您的BaseActivity在需要調用initiateMenuTabs方法

public ClassWide extends BaseActivity{ 

    protected void onCreate(final Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.wide_view); 

     initiateMenuTabs(getActionBar());// here it will call the method from the parent (BaseActivity) 
      .... .... 
+0

但是不是每個使用這個函數的類都是'Activity'驅動,有些也是'FragmentActivity'比我實例化那些嗎? – Maven

+0

FragmentActivity繼承自Activity,所以不應該像使用'new FragmentActivity'的普通類那樣實例化它,如果你想啓動一個Activity,你應該通過intent來實現它,並且如果你想跨所有你的方法共享相同的方法activities/fragmentactivities,那麼你應該讓你的方法是靜態的並且傳遞一個Context作爲參數,並且在方法 – Turkish

+0

中使用上下文或者編寫一個BaseFragmentActivity,你的所有fragmentActivities將會擴展 – Turkish

相關問題