2010-12-03 5 views
3

случаи жизни у меня есть три вида деятельности:TabActivity проходят дополнительные к ребенку

Activity A - Отображение списка данных с веб-сайта. Из этого действия вы можете выполнить действие, которое добавит что-то в этот список (Activity B).

Деятельность B - Это деятельность, которая добавляет данные на сайт. После успешного завершения этого действия необходимо будет сообщить Activity A, чтобы обновить его список.

активности T - A TabHost, который содержит активность А.

Моей проблемы:

активность B должен сказать Activity A для обновления, но его намерение должна быть активность T, так как я хочу TabHost для отображения активности A.

//ActivityB.class 
Intent myIntent = new Intent(v.getContext(), ActivityT.class); 
myIntent.putExtra("target", "ActivityA"); 
myIntent.putExtra("refreshData", true); 
startActivityForResult(myIntent, 0); 

Я думал, что я мог бы использовать TabHost в качестве посредника и просто передать массовку до активность а, если они были установлены, например, так:

//ActivityT.class 
Bundle extras = getIntent().getExtras(); 

// Create an Intent to launch an Activity for the tab (to be reused) 
intent = new Intent().setClass(this, ActivityA.class); 

// Check to see if we want to pass our bundle through to the activity 
if (extras != null && extras.getString("target").equals("activityA")) { 
    intent.putExtras(extras); 
} 

// Initialize a TabSpec for each tab and add it to the TabHost 
spec = tabHost.newTabSpec("Tab1").setIndicator("Tab1", 
      res.getDrawable(R.drawable.ic_tab_tab1)).setContent(intent); 
tabHost.addTab(spec); 

Это прекрасно работает, за исключением того, что при изменении вкладки на другую вкладку и изменить назад, статисты еще раз пройден, и снова - что приводит мою вкладку, чтобы обновить свои данные каждый раз, хотя я m больше не выходит из Activity B. Это происходит потому, что TabActivity не воссоздается при изменении вкладок, и поэтому дополнительные функции всегда передаются дочерним целям.

Итак, как я могу сказать, что активность А обновляется ТОЛЬКО от Activity B, но все-таки появляется TabHost?

+0

Использование трансляций. – Falmarri 2010-12-03 00:42:09

+0

Не транслируется небольшой тяжелый долг для такой небольшой задачи? Разве они обычно не используются для прослушивания событий/намерений, транслируемых другими приложениями/службами? – 2010-12-03 17:14:23

ответ

0

Хотя, возможно, это не самое элегантное решение, я использовал статические элементы данных в классе ActivityA, который я могу установить из ActivityB.

//ActivityA.class 

public static boolean refreshData = false; 

public void onResume() { 
    if (refreshData) { 
     mRefreshData(); 
     refreshData = false; 
    } 
} 

//ActivityB.class 

ActivityA.refreshData = true; 
Intent myIntent = new Intent(v.getContext(), ActivityT.class); 
startActivityForResult(myIntent, 0); 

Мне интересно узнать, есть ли лучший способ сделать это!

0

Я закончил работу с грубой задачей и скопировал код TabHost, TabActivity и TabWidget и настроил его для моих нужд, чтобы решить эту проблему. Это не то, чем я горжусь, но это трюк.

Это также оказалось несколько полезным, так как были некоторые незначительные другие ухищрения, которые я сделал, чтобы облегчить выполнение других вещей.