D@ve
Erfahrenes Mitglied
- 21
Moin. Ich hab ein TabLayout mit je drei Tabs, die im Prinzip alle gleich aussehen. Diese Tabs enthalten je eine ListActivity mit Elementen die wiederum jeweils auf eine DummyActivity verlinken (sol leine Navigation für SubApps werden mit Favoriten etc).
Das klappt beim ersten Tab auch wunderprächtig. Beim zweiten und dritten Tab habe ich aber das Problem, dass wenn ich von der Dummy-Activity wieder zurück gehe, dass dann die App abstürzt.
Hier mal das Tablayout
Hier die ListActivity (sieht bei allen Tabs gleich aus)
Und hier der Dummy:
Es knallt in der onResume() bei der Zeile wo ich einen neuen Tabb hinzufüge:
tabHost.addTab(spec);
Hier mal die komplette Fehlermeldung:
Da man die Apps in den Tabs auch umsortieren kann (später), baue ich das Tablayout in der OneResume() auf und lösche mit tabHost.clearAllTabs() alle Tabs.
Ich vermute mal, dass da der Fehler liegt. Weil wenn ich das in die onCreate() packe klappt es...
Vielen Dank
Gruß, Dave
Das klappt beim ersten Tab auch wunderprächtig. Beim zweiten und dritten Tab habe ich aber das Problem, dass wenn ich von der Dummy-Activity wieder zurück gehe, dass dann die App abstürzt.
Hier mal das Tablayout
Code:
public class TabLayoutActivity extends TabActivity {
/** Called when the activity is first created. */
private SharedPreferences preferences;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
}
@Override
public void onResume() {
//Toast.makeText(this.getBaseContext(), "test", Toast.LENGTH_LONG).show();
this.preferences = SettingsActivity.getPreferences(this);
Resources res = getResources(); // Resource object to get Drawables
TabHost tabHost = getTabHost(); // The activity TabHost
TabHost.TabSpec spec; // Resusable TabSpec for each tab
Intent intent; // Reusable Intent for each tab
tabHost.clearAllTabs();
// Create an Intent to launch an Activity for the tab (to be reused)
intent = new Intent().setClass(this, FavoritesActivity.class);
// Initialize a TabSpec for each tab and add it to the TabHost
spec = tabHost.newTabSpec("Favorites").setIndicator(this.getString(R.string.favorites),
res.getDrawable(R.drawable.ic_tab_favorites)).setContent(intent);
tabHost.addTab(spec); // <------ Zeile 44: Hier knallts
// Do the same for the other tabs
intent = new Intent().setClass(this, OptionalActivity.class);
spec = tabHost.newTabSpec("Optional").setIndicator(this.getString(R.string.optional),
res.getDrawable(R.drawable.ic_tab_optional)).setContent(intent);
tabHost.addTab(spec);
//Display the hidden apps only if activated in settings
if (this.preferences.getBoolean("display_hidden_apps", true)) {
intent = new Intent().setClass(this, HiddenActivity.class);
spec = tabHost.newTabSpec("hidden").setIndicator(this.getString(R.string.hidden),
res.getDrawable(R.drawable.ic_tab_hidden)).setContent(intent);
tabHost.addTab(spec);
}
//Setting the start tab
tabHost.setCurrentTab(0);
super.onResume();
}
public boolean onCreateOptionsMenu(android.view.Menu menu) {
getMenuInflater().inflate(R.menu.tab_layout_menu, menu);
return super.onCreateOptionsMenu(menu);
}
public boolean onOptionsItemSelected(MenuItem item) {
switch (item.getItemId()) {
case R.id.settings:
Intent intent = new Intent(this, SettingsActivity.class);
startActivity(intent);
return true;
default:
return super.onOptionsItemSelected(item);
}
}
}
Hier die ListActivity (sieht bei allen Tabs gleich aus)
Code:
public class FavoritesActivity extends ListActivity {
private FlatNavigation navigation;
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
}
@Override
public void onResume(){
this.navigation = NavigationConfigurator.initializeNavigation();
setListAdapter(new ArrayAdapter<String>(this, R.layout.list_item, this.navigation.getNavCollection(ViewType.FAVORITE).getSubAppsNames()));
ListView lv = getListView();
lv.setTextFilterEnabled(true);
AppSelectedListener listener = new AppSelectedListener(this, navigation);
lv.setOnItemClickListener(listener);
super.onResume();
}
}
Und hier der Dummy:
Code:
public class SubAppDummyActivitiy extends Activity{
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.dummy);
TextView textview = new TextView(this);
textview.setText("Dummy");
setContentView(textview);
}
}
Es knallt in der onResume() bei der Zeile wo ich einen neuen Tabb hinzufüge:
tabHost.addTab(spec);
Hier mal die komplette Fehlermeldung:
01-18 19:33:15.105: E/AndroidRuntime(24031): FATAL EXCEPTION: main
01-18 19:33:15.105: E/AndroidRuntime(24031): java.lang.RuntimeException: Unable to resume activity {net.remmel.ipu/net.remmel.ipu.TabLayoutActivity}: java.lang.NullPointerException
01-18 19:33:15.105: E/AndroidRuntime(24031): at android.app.ActivityThread.performResumeActivity(ActivityThread.java:2124)
01-18 19:33:15.105: E/AndroidRuntime(24031): at android.app.ActivityThread.handleResumeActivity(ActivityThread.java:2139)
01-18 19:33:15.105: E/AndroidRuntime(24031): at android.app.ActivityThread$H.handleMessage(ActivityThread.java:961)
01-18 19:33:15.105: E/AndroidRuntime(24031): at android.os.Handler.dispatchMessage(Handler.java:99)
01-18 19:33:15.105: E/AndroidRuntime(24031): at android.os.Looper.loop(Looper.java:130)
01-18 19:33:15.105: E/AndroidRuntime(24031): at android.app.ActivityThread.main(ActivityThread.java:3691)
01-18 19:33:15.105: E/AndroidRuntime(24031): at java.lang.reflect.Method.invokeNative(Native Method)
01-18 19:33:15.105: E/AndroidRuntime(24031): at java.lang.reflect.Method.invoke(Method.java:507)
01-18 19:33:15.105: E/AndroidRuntime(24031): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:907)
01-18 19:33:15.105: E/AndroidRuntime(24031): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:665)
01-18 19:33:15.105: E/AndroidRuntime(24031): at dalvik.system.NativeStart.main(Native Method)
01-18 19:33:15.105: E/AndroidRuntime(24031): Caused by: java.lang.NullPointerException
01-18 19:33:15.105: E/AndroidRuntime(24031): at android.widget.TabWidget.setCurrentTab(TabWidget.java:342)
01-18 19:33:15.105: E/AndroidRuntime(24031): at android.widget.TabWidget.focusCurrentTab(TabWidget.java:366)
01-18 19:33:15.105: E/AndroidRuntime(24031): at android.widget.TabHost.setCurrentTab(TabHost.java:335)
01-18 19:33:15.105: E/AndroidRuntime(24031): at android.widget.TabHost.addTab(TabHost.java:226)
01-18 19:33:15.105: E/AndroidRuntime(24031): at net.remmel.ipu.TabLayoutActivity.onResume(TabLayoutActivity.java:44)
01-18 19:33:15.105: E/AndroidRuntime(24031): at android.app.Instrumentation.callActivityOnResume(Instrumentation.java:1150)
01-18 19:33:15.105: E/AndroidRuntime(24031): at android.app.Activity.performResume(Activity.java:3858)
01-18 19:33:15.105: E/AndroidRuntime(24031): at android.app.ActivityThread.performResumeActivity(ActivityThread.java:2114)
01-18 19:33:15.105: E/AndroidRuntime(24031): ... 10 more
Da man die Apps in den Tabs auch umsortieren kann (später), baue ich das Tablayout in der OneResume() auf und lösche mit tabHost.clearAllTabs() alle Tabs.
Ich vermute mal, dass da der Fehler liegt. Weil wenn ich das in die onCreate() packe klappt es...
Vielen Dank
Gruß, Dave