Problem mit Tabhost und ListActivity

  • Antworten:8
Normen Düring
  • Forum-Beiträge: 15

08.02.2012, 11:10:53 via Website

Hi programmiere gerade eine kleine Messenger App, in der ist ein Tabhost mit 3 Tabs, Tab1 Kontakte, Tab2 Chat und Tab3 Accounts.

Tab1 ist mit der KontakteActivity bestückt welche mit ListActivity erweitert wurde um auf das clicken der einzelnen Kontakte zu reagieren.
Geht alles super kann auch die Daten von Activity zu Activity schicken alles kein Problem. Wenn ich die Tabs zum wechseln nehme geht es auch nur wenn ich halt den Kontakt auswähle geht es nicht und ich habe keine Idee mehr wie man das anstellen könnte.
Hatte an ActivityGroup gedacht könnte das eine Lösung sein?

Ich möchte auf einen Kontakt klicken und dann soll der ChatTab mit der ChatActivity in den Vordergrund kommen und nicht die ChatActivity außerhalb gestartet werden (startActivity(new Intent(this, ChatActivity.class));.

Wäre super wenn einer nen Link hat wo nen Tutorial dazu ist TabHost mit ListActivity und selectedItem in Kombination einzeln findet man ja 1000.

Oder sehe ich die einfach Lösung gerade nicht weil sie so leicht ist????:*)

Antworten
Felix
  • Forum-Beiträge: 259

08.02.2012, 14:09:55 via Website

Tach!

Das Problem ist, dass die Intents bereits fertig sind, wenn du die einzelnen Tabs definierst. Ich kann mir vorstellen, dass es gehen könnte, wenn du beim Kontaktauswählen der TabHost-Activity einen Intent mit den benötigten Daten des Kontakts schickst, und diese die Intents der anderen Tabs anpasst. Anschließend kann der Nutzer die Tabs wechseln oder du wechselst ihn mit setCurrentTab().

Hatte an ActivityGroup gedacht könnte das eine Lösung sein?

Die TabActivity ist doch bereits eine ActivityGroup.

Es ist aber nicht notwendig, einen TabHost mit einzelnen Activitys zu bestücken. Stattdessen kann man in TabSpecs setContent() auch eine View-ID angeben. Dann wechselt der TabHost zwischen diesen Views hin und her und alles bleibt in derselben Activity.


Felix.

Antworten
Normen Düring
  • Forum-Beiträge: 15

08.02.2012, 14:26:48 via Website

Auszug aus der TabhostActivity:
1@Override
2 protected void onCreate(Bundle savedInstanceState) {
3 super.onCreate(savedInstanceState);
4 setContentView(R.layout.tabhost);
5
6 tabHost = getTabHost(); // TabHost der Activity
7 tabHost.setup();
8
9 // Tab für Kontakte
10 TabSpec kontaktespec = tabHost.newTabSpec("Kontakte");
11 // Titel für den Tab setzen
12 kontaktespec.setIndicator("Kontakte");
13 Intent kontakteIntend = new Intent().setClass(this, KontakteActivity.class);
14 kontaktespec.setContent(kontakteIntend);
15 // Tabspec Tabhost hinzufügen
16 tabHost.addTab(kontaktespec);
17
18 // Tab für Chat
19 TabSpec chatspec = tabHost.newTabSpec("Chat");
20 // Titel für Tab setzen
21 chatspec.setIndicator("Chat");
22 Intent chatIntend = new Intent().setClass(this, ChatActivity.class);
23 chatspec.setContent(chatIntend);
24 // Tabspec Tabhost hinzufügen
25 tabHost.addTab(chatspec);
26
27 // Tab für GPSLocation
28 TabSpec gpslocationspec = tabHost.newTabSpec("GPS");
29 // Title für Tab setzen
30 gpslocationspec.setIndicator("GPS Position");
31 Intent gpslocationIntent = new Intent().setClass(this, GPSLocationTabActivity.class);
32 gpslocationspec.setContent(gpslocationIntent);
33 // Tabspec Tabhost hinzufügen
34 tabHost.addTab(gpslocationspec);
35 // Start Tab setzen
36 tabHost.setCurrentTab(0);
37
38
39 // in der Schleife wird die Hintergrundfarbe der Tab´s eingestellt.
40 for(int i=0; i < tabHost.getTabWidget().getChildCount(); i++) {
41 //abgewählt
42 tabHost.getTabWidget().getChildAt(i).setBackgroundResource(R.color.blau_halbtransparent);
43 }
44 //angewählt
45 tabHost.getTabWidget().getChildAt(tabHost.getCurrentTab()).setBackgroundResource(R.color.darkblue);
46
47 //Debugging
48 Log.i(TAG, "TabhostActivity erzeugt CREATE");
49 }

Start ist dann der erste Tab Kontakte welcher die KontakteActivity startet in dieser will ich ja dann den Tab ändern wenn auf einen Kontakt geklickt wurde.

Auszug aus der KontakteActivity:
1@Override
2 protected void onListItemClick(ListView l, View v, int position, long id) {
3 String item = (String) getListAdapter().getItem(position);
4 for (int i = 0; i< userList.size(); i++){
5 if (userList.get(i).getUsername().equalsIgnoreCase(item)){
6 datenhaltung.setmUserSelected(userList.get(i));
7Hier wollte ich dann den Tab wechseln!! Wie komme ich hier an den Tabhost ran??
8 }
9 }
10 Toast.makeText(this, item + " ausgewählt.", Toast.LENGTH_LONG).show();
11 }

Irgendwie spinnt das hier mit dem Code einfügen komisch hoffe das es reicht was ich gepostet habe.

Hab an die Stelle geschrieben wo ich den Tab ändern will geht das an der Stelle irgendwie??

Antworten
Markus Gu
  • Forum-Beiträge: 2.644

08.02.2012, 15:47:23 via Website

TabActivity ist mittlerweile deprecated. - nur so als info

swordiApps Blog - Website

Antworten
Felix
  • Forum-Beiträge: 259

08.02.2012, 16:25:30 via Website

Tach!

Hier wollte ich dann den Tab wechseln!! Wie komme ich hier an den Tabhost ran??

Wie ich schon sagte, mit Intents. Intents ist die vorgesehene Art, zwischen Activitys zu kommunizieren. Das kannst du nur umgehen, indem du die Activitys (soweit möglich) meidest.


Felix.

Antworten
Normen Düring
  • Forum-Beiträge: 15

08.02.2012, 17:00:13 via Website

TabActivity ist mittlerweile deprecated. - nur so als info


Wie wird es denn aktuell gemacht??
Wäre super, wenn man es gleich sagen könnte, wie man es jetzt macht oder ob es sich auch auf die SDK-Version 7 bezieht oder allgemein deprecated ist?!
Fände ein paar mehr Informationen könnten nicht schaden lerne ja mit jeder Information mehr über Androidprogrammierung.:lol:

Antworten
Normen Düring
  • Forum-Beiträge: 15

08.02.2012, 18:20:41 via Website

So hab es jetzt mit nem Broadcast gemacht geht super :vader:

1@Override
2 protected void onListItemClick(ListView l, View v, int position, long id) {
3 String item = (String) getListAdapter().getItem(position);
4 for (int i = 0; i< userList.size(); i++){
5 if (userList.get(i).getUsername().equalsIgnoreCase(item)){
6 datenhaltung.setmUserSelected(userList.get(i));
7 Intent broadcastIntent = new Intent(ACTION_BROADCAST);
8 broadcastIntent.putExtra("value", "Chat");
9 getApplicationContext().sendBroadcast(broadcastIntent);
10 }
11 }
12 Toast.makeText(this, item + " ausgewählt.", Toast.LENGTH_LONG).show();
13 }

Und in der TabhostActivity:

1private final BroadcastReceiver mBroadcastReceiver = new BroadcastReceiver() {
2
3 @Override
4 public void onReceive(Context context, Intent intent) {
5 final Bundle extras = intent.getExtras();
6 if (extras != null){
7 String test = extras.getString("value");
8 tabHost.setCurrentTabByTag(test);
9 }
10 }
11 };

und in der onResume() noch anmelden und onPause() wieder abmelden:

1@Override
2 protected void onResume() {
3 super.onResume();
4 final IntentFilter intentFilter = new IntentFilter("de.matrix.berlin.intent.action.CHAT");
5 getApplicationContext().registerReceiver(mBroadcastReceiver, intentFilter);
6 //Debugging
7 Log.i(TAG, "TabHostActivity aufgewacht RESUME");
8 }

1@Override
2 protected void onPause() {
3 super.onPause();
4 getApplicationContext().unregisterReceiver(mBroadcastReceiver);
5 //Debugging
6 Log.i(TAG, "TabHostActivity geht in den Hintergrund ONPAUSE");
7 }

Antworten
Felix
  • Forum-Beiträge: 259

08.02.2012, 20:10:25 via Website

Tach!

Normen Garz
TabActivity ist mittlerweile deprecated. - nur so als info
Wie wird es denn aktuell gemacht?

Siehe Dokumentation zur TabActivity.


Felix.

Antworten
Normen Düring
  • Forum-Beiträge: 15

08.02.2012, 22:32:59 via Website

Felix
Tach!

Normen Garz
TabActivity ist mittlerweile deprecated. - nur so als info
Wie wird es denn aktuell gemacht?

Siehe Dokumentation zur TabActivity.


Felix.

Danke für die Info werde mir das gleich mal anschauen.

Antworten