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

TabHost mehrere Activitys

Dieses Thema im Forum "Android App Entwicklung" wurde erstellt von Gingerbread, 16.02.2011.

  1. Gingerbread, 16.02.2011 #1
    Gingerbread

    Gingerbread Threadstarter Android-Hilfe.de Mitglied

    Beiträge:
    110
    Erhaltene Danke:
    6
    Registriert seit:
    21.01.2011
    Habe versucht weitere Activities zu einem Tab hinzuzufügen, so dass trotzdem im Header die Tab leiste noch angezeigt wird. Jedoch bekomme ich immer eine NullPointerException.

    Also mein TabHost ist in einer Activity deklariert und funktioniert auch.

    Aufrufen der ArchiveGroup: (FirstActivity)
    Code:
                           public void onClick(View v) {
    				// TODO Auto-generated method stub
    			
    				Intent i = new Intent(getApplicationContext(), ArchiveGroup.class);
    				i.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
    				View view = ArchiveGroup.group.getLocalActivityManager().startActivity("Show", i).getDecorView();
    				ArchiveGroup.group.setContentView(view);
    			}
    Inhalt der ArchiveGroup:
    Code:
    public class ArchiveGroup extends ActivityGroup {
    
        public static ArchiveGroup group;
        private ArrayList<View> history;
    
        
        
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            // TODO Auto-generated method stub
            super.onCreate(savedInstanceState);
            this.history = new ArrayList<View>();
            group = this;
            
            View view = getLocalActivityManager().startActivity("name", 
                    new Intent(this, SecondActivity.class).addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP)).getDecorView();
            
            setContentView(view);
        }
        
       
    
    }
    Die Activity die angezeigt werden soll (SecondActivity.class) enthält nur ganz normalen Code. Die NullPointerException tritt auch schon vor dem aufruf auf, nämlich schon beim onClick in der FirstActivity.
    Wo liegt der Fehler?
     
  2. Mss, 17.02.2011 #2
    Mss

    Mss Android-Hilfe.de Mitglied

    Beiträge:
    62
    Erhaltene Danke:
    8
    Registriert seit:
    07.06.2010
    Phone:
    Panasonic Eluga
    Mit so wenigen Informationen zur Exception bzw. Code ist es schwierig zu sagen. Debugge den Code, dann siehst du auch wo genau die Exception auftritt.

    Ich vermute es liegt daran, dass der Zugriff auf group in OnClick die NullPointerException auslöst, da noch group zu diesem Zeitpunkt noch keine Instanz zugewiesen ist. :winki: Dies geschieht erst bei startActivity().
     
  3. Gingerbread, 20.02.2011 #3
    Gingerbread

    Gingerbread Threadstarter Android-Hilfe.de Mitglied

    Beiträge:
    110
    Erhaltene Danke:
    6
    Registriert seit:
    21.01.2011
    Also das spuckt Logcat aus:

    java.lan.NullPointerException
    at [...].onClick(...)
    at android.view.View.performClick(View.java:2408)
    at android.view.View$PerformClick.run(View.java:8816)
    at android.os.Handler.handleCallback(Handler.java: 587)
    at android.os.Handler.dispatchMessage(Handler.java: 92)
    at android.os.Looper.loop(Looper.java: 123)
    at android.app.ActivityThread.main(Activity.Thread.java: 4627)
    at java.lan.reflect.Mehtod.invokeNative(Native Method)
    at java.lan.reflect.Method.invoke(Method.java:521)


    Rest ist glaub ich unwichtig

    Die Exception tritt direkt auf, wenn auf den Button in der FirstActivity gedrückt wird.
     
  4. Mss, 20.02.2011 #4
    Mss

    Mss Android-Hilfe.de Mitglied

    Beiträge:
    62
    Erhaltene Danke:
    8
    Registriert seit:
    07.06.2010
    Phone:
    Panasonic Eluga
    at [...].onClick(...) ist wichtig, welche Zeile wird da in den Klammern angezeigt?;)
     
  5. Gingerbread, 20.02.2011 #5
    Gingerbread

    Gingerbread Threadstarter Android-Hilfe.de Mitglied

    Beiträge:
    110
    Erhaltene Danke:
    6
    Registriert seit:
    21.01.2011
    Da steht dann onClick(FirstActivity.java: 29)
    Jedoch befindet sich in Zeile 29 der FirstActivity gar kein Coder mehr.

    Edit: Habe vergessen die Imports mitzuzählen. Ich glaube es handelt sich um folgende Zeile:

    ArchiveGroup.group.setContentView(view);
     
    Zuletzt bearbeitet: 20.02.2011
  6. Mss, 21.02.2011 #6
    Mss

    Mss Android-Hilfe.de Mitglied

    Beiträge:
    62
    Erhaltene Danke:
    8
    Registriert seit:
    07.06.2010
    Phone:
    Panasonic Eluga
    Lass dir doch die Zeilen Nr in Eclipse anzeigen.
    Window -> Preferences -> General -> Editors -> Text Editors Häkchen bei "Show line number" setzen.:winki:

    Welche Zeile ist nun 29?
     
  7. Gingerbread, 21.02.2011 #7
    Gingerbread

    Gingerbread Threadstarter Android-Hilfe.de Mitglied

    Beiträge:
    110
    Erhaltene Danke:
    6
    Registriert seit:
    21.01.2011
    Also es handelt sich um folgende Zeile:

    Code:
    View view = ArchiveGroup.group.getLocalActivityManager().startActivity("Show", i).getDecorView();
     
  8. Mss, 21.02.2011 #8
    Mss

    Mss Android-Hilfe.de Mitglied

    Beiträge:
    62
    Erhaltene Danke:
    8
    Registriert seit:
    07.06.2010
    Phone:
    Panasonic Eluga
    Wie schon vermutet, liegt es daran, dass der Zugriff auf group in OnClick die NullPointerException auslöst, da noch group zu diesem Zeitpunkt noch keine Instanz zugewiesen ist. Dies geschieht erst bei startActivity().

    Teste mal

    Code:
    View view = getLocalActivityManager().startActivity("Show", i).getDecorView();
     
  9. Gingerbread, 21.02.2011 #9
    Gingerbread

    Gingerbread Threadstarter Android-Hilfe.de Mitglied

    Beiträge:
    110
    Erhaltene Danke:
    6
    Registriert seit:
    21.01.2011
    Wenn ich das einfach
    View view = ArchiveGroup.group.getLocalActivityManager().startActivity("Show", i).getDecorView();

    durch
    Code:
    View view = getLocalActivityManager().startActivity("Show", i).getDecorView(); 
    ersetze bekomme ich eine Fehlermeldung von Eclipse, dass ich die Methoe getLocalActivityManger() erst erstellen sollte.
     
  10. Mss

    Mss Android-Hilfe.de Mitglied

    Beiträge:
    62
    Erhaltene Danke:
    8
    Registriert seit:
    07.06.2010
    Phone:
    Panasonic Eluga
    Sry, ich meinte:
    Code:
    View view = ArchiveGroup.getLocalActivityManager().startActivity("Show", i).getDecorView();
    
     
  11. Gingerbread, 22.02.2011 #11
    Gingerbread

    Gingerbread Threadstarter Android-Hilfe.de Mitglied

    Beiträge:
    110
    Erhaltene Danke:
    6
    Registriert seit:
    21.01.2011
    bekomme jetzt eben die Fehlermeldung, dass getLocalActivityManager() keine statische Methode sei.
    cannot make a static reference to the non-static method getLocalActivityManager() from the type ArchiveGroup
     
  12. Gingerbread, 22.02.2011 #12
    Gingerbread

    Gingerbread Threadstarter Android-Hilfe.de Mitglied

    Beiträge:
    110
    Erhaltene Danke:
    6
    Registriert seit:
    21.01.2011
    Wie löst ihr denn das Problem, im TabHost die obere Tableiste noch zu behalten, wenn ihr ein neues Activity öffnen wollt?
     
  13. Gingerbread, 23.02.2011 #13
    Gingerbread

    Gingerbread Threadstarter Android-Hilfe.de Mitglied

    Beiträge:
    110
    Erhaltene Danke:
    6
    Registriert seit:
    21.01.2011
    Habe hier mal ne generelle Verständnisfrage:
    (Habe mich am Beispiel von http://united-coders.com/nico-heid/...oup-within-tabhost-to-show-different-activity orientiert)

    Also ich habe eine Activity Tabhost
    Hier definiere ich die einzelnen Tabs die haben möchte.

    Dann wird z.B. auf ArchiveGroup.class weitergeleitet:
    Was passiert dann hier genau?

    ArchiveActivity
    Ist dies dann einfach die Zweite Activity, die dargestellt werden soll?
     
  14. Gingerbread, 23.02.2011 #14
    Gingerbread

    Gingerbread Threadstarter Android-Hilfe.de Mitglied

    Beiträge:
    110
    Erhaltene Danke:
    6
    Registriert seit:
    21.01.2011
    Ich habe es jetzt nochmal wie auf
    Android: TabActivity Nested Activities | Henrik Larsen Toft
    gemacht. Und ich bekomme schon wieder eine NullPointerException an der gleichen Stelle. Hier der Code:

    Die FirstGroup.class
    Code:
    public class FirstGroup extends ActivityGroup {
    
    	public static FirstGroup group;
    	
    	private ArrayList<View> history;
    	
    	@Override
        protected void onCreate(Bundle savedInstanceState){
    		super.onCreate(savedInstanceState);
    		this.history = new ArrayList<View>();
    		group = this;
    		
    		
    		View view = getLocalActivityManager().startActivity("CitiesActivity", new  
                    Intent(this,CitiesActivity.class)  
                    .addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP))  
                    .getDecorView();  
    		replaceView(view);  
    		
    	}
    	
    	public void replaceView(View v) {  
            // Adds the old one to history  
           history.add(v);  
            // Changes this Groups View to the new View.  
           setContentView(v);  
          }  
    	
    	public void back() {  
            if(history.size() > 0) {  
                history.remove(history.size()-1);  
                setContentView(history.get(history.size()-1));  
            }else {  
                finish();  
            }  
        }
    	
        public void onBackPressed() {  
            FirstGroup.group.back();  
            return;  
        }  
    }
    Und schließlich die CitiesActivity.class
    Code:
    public class CitiesActivity extends ActivityGroup {
        public void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
    
            setContentView(R.layout.cities);
            
            
            Button bu = (Button)findViewById(R.id.bu_1);
            bu.setOnClickListener(new OnClickListener() 
            {
    			
    			@Override
    			public void onClick(View v) 
    			{
    				// TODO Auto-generated method stub
    				Intent i = new Intent(CitiesActivity.this, ShowCities.class); 
    				
    				[COLOR="Red"]View view = FirstGroup.group.getLocalActivityManager()[/COLOR]  
    		        .startActivity("Show Cities", i  
    		        .addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP))  
    		        .getDecorView();  
    		  
    		        // Again, replace the view  
    		        FirstGroup.group.replaceView(view);  
    			
    			}
    		}
            )
            ;
        }
        }
    Die Exception tritt wieder an gleicher Stelle auf. Woran liegt es?
     

Diese Seite empfehlen