TabHost mehrere Activitys

G

Gingerbread

Fortgeschrittenes Mitglied
6
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?
 
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().
 
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.
 
at [...].onClick(...) ist wichtig, welche Zeile wird da in den Klammern angezeigt?;)
 
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:
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?
 
Also es handelt sich um folgende Zeile:

Code:
View view = ArchiveGroup.group.getLocalActivityManager().startActivity("Show", i).getDecorView();
 
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();
 
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.
 
Sry, ich meinte:
Code:
View view = ArchiveGroup.getLocalActivityManager().startActivity("Show", i).getDecorView();
 
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
 
Wie löst ihr denn das Problem, im TabHost die obere Tableiste noch zu behalten, wenn ihr ein neues Activity öffnen wollt?
 
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?
 
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?
 

Ähnliche Themen

B
Antworten
1
Aufrufe
801
swa00
swa00
H
  • HoustonWeHaveAProblem
Antworten
3
Aufrufe
801
moin
M
michy84
Antworten
5
Aufrufe
1.799
kevte89
kevte89
Zurück
Oben Unten