1

MainActivity クラスには、さまざまなアクティビティ クラスからアクセスして、他のすべてのアクティビティのアプリケーション バーでタブをインスタンス化するメソッドがあります。

ただし、クラスから MainActivity クラスのこの関数を呼び出すと、次のようにスローされます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
4

1 に答える 1

1

別のアクティビティ内で Android アクティビティをインスタンス化しています。Activity は Android の単純なクラスではありません。必要な Activity からメソッドを呼び出すには、すべてのアクティビティに共通のメソッドを含む BaseActivity を定義し、一般的な Activity クラスを拡張するのではなく、それを拡張する必要があります。 :

public class BaseActivity extends Activity {

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

次に、initializeMenuTabs メソッドを呼び出す必要がある他のアクティビティで BaseActivity を拡張します。

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)
            .... ....
于 2013-09-29T20:07:12.147 に答える