1. Nimm jetzt an unserem Uhans - 3. ADVENT - Gewinnspiel teil - Alle Informationen findest Du hier!

Absturz bei Tablayout

Dieses Thema im Forum "Android App Entwicklung" wurde erstellt von D@ve, 18.01.2012.

  1. D@ve, 18.01.2012 #1
    D@ve

    D@ve Threadstarter Fortgeschrittenes Mitglied

    Beiträge:
    410
    Erhaltene Danke:
    18
    Registriert seit:
    18.12.2011
    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:

    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
     
  2. D@ve, 19.01.2012 #2
    D@ve

    D@ve Threadstarter Fortgeschrittenes Mitglied

    Beiträge:
    410
    Erhaltene Danke:
    18
    Registriert seit:
    18.12.2011
    Hmmm Lösung war recht einfach (hat aber viel Zeit gekostet).

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

Diese Seite empfehlen