編集:解決しました。問題は tabHost.ClearAllTabs() でした。この関数を呼び出す前に、次のように currentActiveTab を 0 - ゼロに設定する必要がありました: tabHost.setCurrentTab(0);
だから、私にとって解決策は次のとおりでした:
tabHost.setCurrentTab(0);
tabHost.clearAllTabs();
onResume() が呼び出されるたびに clearAllTabs を呼び出さなかった場合、すでに多くのタブを作成していた人に加えて、4 つの新しいタブが作成されました...
編集終了。
アプリケーションに問題があります。これはライブラリ プロジェクトであり、TabActivity を使用します。以下のコードを参照してください。ユーザーはアプリケーションを「一時停止」(onStop()) し、インターネットに接続し、アプリケーションに再入力できるため、すべてのタブ処理は onResume() にあります。
アプリケーションは正常に起動し、戻るボタンを使用して閉じた場合は正常に再起動します。しかし、ユーザーがホームボタンを使用してアクティビティを「一時停止」し、ActivityOne を配置すると、再入力時にエラーが発生します。エラーは、私のコードの最初の tabHost.addTab(spec) (if ステートメントの前) で NULLPOINTEREXCEPTION が原因で発生した「アクティビティを再開できません」です。
Libraryproject = com.tabsactivity.library
このアプリが使用するすべてのレイアウトとクラスは、ライブラリ プロジェクトにあります。
ActivityZero は AndroidManifest.XML で次のように宣言されています
<activity
android:name="com.tabsactivity.library.ActivityZero"
android:windowSoftInputMode="stateHidden">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
<activity
android:name="com.tabsactivity.library.ActivityOne"
android:windowSoftInputMode="stateHidden" >
</activity>
...
<activity
android:name="com.tabsactivity.library.ActivityFour"
android:windowSoftInputMode="stateHidden" >
</activity>
ActivityZero.class
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
res = getResources();
appPref = getSharedPreferences("Prefs", MODE_PRIVATE);
prefEditor = appPref.edit();
if (getApplicationContext().getPackageName().trim().equals("com.app")) prefEditor.putBoolean("demo", false);
else prefEditor.putBoolean("demo", true).commit();
}
@Override
protected void onResume() {
super.onResume();
ConnectivityManager conMgr = ConnectivityManager)getSystemService(Context.CONNECTIVITY_SERVICE);
NetworkInfo ni = conMgr.getActiveNetworkInfo();
if (ni == null) prefEditor.putBoolean("connected_net", false).commit();
else prefEditor.putBoolean("connected_net", true).commit();
this.getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_STATE_ALWAYS_HIDDEN);
tabHost = getTabHost();
tabHost.clearAllTabs();
intent = new Intent().setClass(this, com.tabsactivity.library.ActivityOne.class);
spec = tabHost.newTabSpec("One").setIndicator("One", res.getDrawable(R.drawable.ic_tab)).setContent(intent);
tabHost.addTab(spec);
if ( (appPref.getBoolean("connected_net", false) && appPref.getBoolean("demo", true)) || !appPref.getBoolean("demo", true)) {
intent = new Intent().setClass(this, com.tabsactivity.library.ActivityTwo.class);
spec = tabHost.newTabSpec("Two").setIndicator("Two", res.getDrawable(R.drawable.ic_tab)).setContent(intent);
tabHost.addTab(spec);
intent = new Intent().setClass(this, com.tabsactivity.library.ActivityThree.class);
spec = tabHost.newTabSpec("Three").setIndicator("Three", res.getDrawable(R.drawable.ic_tab)).setContent(intent);
tabHost.addTab(spec);
intent = new Intent().setClass(this, com.tabsactivity.library.ActivityFour.class);
spec = tabHost.newTabSpec("Four").setIndicator("Four", res.getDrawable(R.drawable.ic_tab)).setContent(intent);
tabHost.addTab(spec);
} else {
Toast.makeText(this, "Please make sure you have a working internetconnection!", Toast.LENGTH_LONG).show();
}
tabHost.setCurrentTab(0);
}
エラーログ:
11-13 20:16:36.377: W/dalvikvm(9337): threadid=1: thread exiting with uncaught exception (group=0x400259f8)
11-13 20:16:36.387: E/AndroidRuntime(9337): FATAL EXCEPTION: main
11-13 20:16:36.387: E/AndroidRuntime(9337): java.lang.RuntimeException: Unable to resume activity {com.app/com.tabsactivity.library.ActivityZero}: java.lang.NullPointerException
11-13 20:16:36.387: E/AndroidRuntime(9337): at android.app.ActivityThread.performResumeActivity(ActivityThread.java:3347)
11-13 20:16:36.387: E/AndroidRuntime(9337): at android.app.ActivityThread.handleResumeActivity(ActivityThread.java:3362)
11-13 20:16:36.387: E/AndroidRuntime(9337): at android.app.ActivityThread$H.handleMessage(ActivityThread.java:2162)
11-13 20:16:36.387: E/AndroidRuntime(9337): at android.os.Handler.dispatchMessage(Handler.java:99)
11-13 20:16:36.387: E/AndroidRuntime(9337): at android.os.Looper.loop(Looper.java:144)
11-13 20:16:36.387: E/AndroidRuntime(9337): at android.app.ActivityThread.main(ActivityThread.java:4937)
11-13 20:16:36.387: E/AndroidRuntime(9337): at java.lang.reflect.Method.invokeNative(Native Method)
11-13 20:16:36.387: E/AndroidRuntime(9337): at java.lang.reflect.Method.invoke(Method.java:521)
11-13 20:16:36.387: E/AndroidRuntime(9337): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:858)
11-13 20:16:36.387: E/AndroidRuntime(9337): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:616)
11-13 20:16:36.387: E/AndroidRuntime(9337): at dalvik.system.NativeStart.main(Native Method)
11-13 20:16:36.387: E/AndroidRuntime(9337): Caused by: java.lang.NullPointerException
11-13 20:16:36.387: E/AndroidRuntime(9337): at android.widget.TabWidget.setCurrentTab(TabWidget.java:339)
11-13 20:16:36.387: E/AndroidRuntime(9337): at android.widget.TabWidget.focusCurrentTab(TabWidget.java:363)
11-13 20:16:36.387: E/AndroidRuntime(9337): at android.widget.TabHost.setCurrentTab(TabHost.java:320)
11-13 20:16:36.387: E/AndroidRuntime(9337): at android.widget.TabHost.addTab(TabHost.java:213)
11-13 20:16:36.387: E/AndroidRuntime(9337): at com.tabsactivity.library.ActivityZero.onResume(ActivityZero.java:209)
11-13 20:16:36.387: E/AndroidRuntime(9337): at android.app.Instrumentation.callActivityOnResume(Instrumentation.java:1255)
11-13 20:16:36.387: E/AndroidRuntime(9337): at android.app.Activity.performResume(Activity.java:3864)
11-13 20:16:36.387: E/AndroidRuntime(9337): at android.app.ActivityThread.performResumeActivity(ActivityThread.java:3337)
11-13 20:16:36.387: E/AndroidRuntime(9337): ... 10 more
11-13 20:16:36.437: D/dalvikvm(9337): GC_FOR_MALLOC freed 5320 objects / 572584 bytes in 48ms