Absturz bei Tablayout

D@ve

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
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
 
Hmmm Lösung war recht einfach (hat aber viel Zeit gekostet).

Einfach vor das clearAllTabs() noch ein setCurrentTab(0). Dann geht's...
 

Ähnliche Themen

D
Antworten
17
Aufrufe
408
datNeMo
D
M
Antworten
3
Aufrufe
166
moin
M
Y
Antworten
4
Aufrufe
1.227
swa00
swa00
Zurück
Oben Unten