TabView

  • Antworten:3
  • Bentwortet
Sebastian Klaiber
  • Forum-Beiträge: 44

20.02.2012, 10:49:47 via Website

Hallo, ich möchte in einem TabView zwei Tabs darstellen in der einen befindet sich eine Listview in der anderen eine GridView. Mein Problem ist das die beiden Activitys vom Facebook FriendsRequestListener Daten benötigen die TabView erzeug ich in meiner onCreate.
onCreate()
1Resources res = getResources();
2 mFriendsList = new Intent(this, FriendsList.class);
3 mBirthdayList = new Intent(this, BrithdayList.class);
4 tabHost = (TabHost)findViewById(android.R.id.tabhost);
5
6 TabHost.TabSpec friendsTabSpec = tabHost.newTabSpec("friends");
7 friendsTabSpec.setIndicator("Friends", res.getDrawable(android.R.drawable.ic_menu_my_calendar)).setContent(mFriendsList);
8
9 TabHost.TabSpec birthdayTabSpec = tabHost.newTabSpec("Brithday");
10 birthdayTabSpec.setIndicator("Birthday", res.getDrawable(android.R.drawable.ic_menu_today)).setContent(mBirthdayList);
11
12 tabHost.addTab(friendsTabSpec);
13 tabHost.addTab(birthdayTabSpec);
14
15 loadFriend();

1private class FriendsRequestListener implements
2 com.facebook.android.AsyncFacebookRunner.RequestListener{
3 @Override
4 public void onComplete(String response, Object state) {
5
6 mBirthdayList.putExtra("API_RESPONSE", response);
7 mFriendsList.putExtra("API_RESPONSE", response);
8 mSpinner.dismiss();
9 }
10}
Wenn ich die Daten so meiner ListView übergebe bekomm ich eine NullPointerException. Meine Main Klasse erbt von TabActivity.
Wie muss ich meine Klasse umbauen damit ich meinen zwei anderen Klassen den String response übermitteln kann?
Danke

Antworten
Markus Gu
  • Forum-Beiträge: 2.644

20.02.2012, 14:45:35 via Website

dein listener wird später ein result bekommen als die tabs erstellt wurden.

du musst eine art observer (glaub ist der richtige ausruck) bauen.

eine zentrale klasse, bei der sich deine activities registrieren und die bekommen dann eine benachrichtigung, wenn der listener onComplete feuert.

hoffe du verstehst was ich meine

swordiApps Blog - Website

Antworten
Sebastian Klaiber
  • Forum-Beiträge: 44

20.02.2012, 15:03:49 via Website

was du meinst versteh ich schon! Nur wie ich es technisch Umsetzen soll bin ich mir gerade nicht sicher! Ein Beispiel hast du nicht zufällig?

Danke für dein Antwort!

Ciao

Antworten
Sebastian Klaiber
  • Forum-Beiträge: 44

21.02.2012, 16:23:17 via Website

So hab eine Lösung gefunden weiß jetzt nicht genau ob das eine gute Variante ist auf jeden Fall funktioniert Sie. Falls jemand eine bessere Idee hat bin offen für Vorschläge :-)

Mit dieser Methode erzeug ich meine TabView
1public void createTabLayout() {
2 res = getResources();
3 graph_or_fql = "graph";
4 mFriendsList = new Intent(this, ListViewGroup.class);
5 mBirthdayList = new Intentthis, BrithdayList.class);
6 mBirthdayList.putExtra("API_RESPONSE", "");
7 mBirthdayList.putExtra("METHOD", graph_or_fql);
8
9 tabHost = (TabHost)findViewById(android.R.id.tabhost);
10
11 TabHost.TabSpec friendsTabSpec = tabHost.newTabSpec("friends");
12// friendsTabSpec.setIndicator("Friends", res.getDrawable(android.R.drawable.ic_menu_my_calendar)).setContent(mFriendsList);
13 friendsTabSpec.setIndicator("Freunde").setContent(mFriendsList);
14
15 TabHost.TabSpec birthdayTabSpec = tabHost.newTabSpec("Brithday");
16// birthdayTabSpec.setIndicator("Birthday", res.getDrawable(android.R.drawable.ic_menu_today)).setContent(mBirthdayList);
17 birthdayTabSpec.setIndicator("Geburtstag").setContent(mBirthdayList);
18 tabHost.setCurrentTab(1);
19 tabHost.addTab(friendsTabSpec);
20 tabHost.addTab(birthdayTabSpec);
21 }

In der ListViewGroup übergeb ich für API Response einen leeren String in meiner ListActivity überprüfe ich das!
1public class ListViewGroup extends ActivityGroup {
2
3 public static ListViewGroup group;
4
5 private ArrayList<View> history;
6
7 @Override
8 protected void onCreate(Bundle savedInstanceState) {
9 super.onCreate(savedInstanceState);
10 this.history = new ArrayList<View>();
11 group = this;
12
13 View view = getLocalActivityManager().startActivity("ListView", new
14 Intent(this,FriendsList.class).putExtra("API_RESPONSE", "").putExtra("METHOD", "graph")
15 .addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP))
16 .getDecorView();
17
18 replaceView(view);
19
20 }
21
22 public void replaceView(View v) {
23 history.add(v);
24 setContentView(v);
25 }
26
27 public void back() {
28 if(history.size() > 0) {
29 history.remove(history.size()-1);
30 setContentView(history.get(history.size()-1));
31 }else {
32 finish();
33 }
34 }
35
36 @Override
37 public void onBackPressed() {
38 ListViewGroup.group.back();
39 return;
40 }
41
42}

In meinem RequestListener übergeb ich dann den richtig Parameter und render die View neu!
1private class FriendsRequestListener implements
2 com.facebook.android.AsyncFacebookRunner.RequestListener{
3 @Override
4 public void onComplete(String response, Object state) {
5 mBirthdayList.putExtra("API_RESPONSE", response);
6 mSpinner.dismiss();
7 mResponse = response;
8
9 Main.this.runOnUiThread(new Runnable() {
10 public void run() {
11 View view = ListViewGroup.group.getLocalActivityManager()
12 .startActivity("ListView", new
13 Intent(Bonayou.this,FriendsList.class).putExtra("API_RESPONSE", mResponse).putExtra("METHOD", "graph")
14 .addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP))
15 .getDecorView();
16 ListViewGroup.group.replaceView(view);
17 }
18 });
19 }

Antworten