Я использую a TabActivity (Main)
с 3 TabSpecs я использую Намерения для содержания этих 3 Вкладок TabA
, TabB
, TabC
например.
Все эти операции вкладки используют общие данные, который хранится в SharedPreferences
В Main
TabActivity
У меня есть меню параметров, которое имеет опцию обновления.
@Override
public boolean onCreateOptionsMenu(Menu menu) {
MenuInflater inflater = getMenuInflater();
inflater.inflate(R.menu.menu, menu);
return true;
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
switch (item.getItemId()) {
case R.id.refresh_menu:
new updateCommonDataFromWeb().execute();
...
}
}
это обновление использует AsyncTask
(updateCommonDataFromWeb) для перезагрузки общих данных от сети.
Мне нужен способ сказать 3 операциям вкладки обновлять свои представления и восстанавливать их содержание от недавно загруженных данных.
Когда операции вкладки сначала создаются, они загружают данные из SharedPreferences
как так:
public class TabA extends Activity {
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.taba);
SharedPreferences prefs = getSharedPreferences(this.getString(R.string.prefs_name), 0);
String usage_data = prefs.getString("common_data", "");
}
}
Я думал о создании общепринятой методики на каждой из операций вкладки как.... reloadViewData()
Я думал, возможно, что я мог использовать менеджера по действию от Main
TabActivity
получить действие текущей вкладки как так:
String tabTag = tabHost.getCurrentTabTag();
Activity activity = getLocalActivityManager().getActivity(tabTag);
# then call the reloadData() method of the tab activity
activity.reloadViewData();
К сожалению, я не могу заставить этот подход работать, пока activity
корректный экземпляр Activity
вместо a TabA
,TabB
или TabC
Возможно, я полностью проявил неправильный подход ко всему этому.
Я также читал много о не использовании Операций для содержания вкладки вместо этого с помощью представлений. Однако я не знаю что представление использовать для замены мой <RelativeLayout />
поскольку я не могу использовать свой R.layout.* как представления.
Вы можете расширить Activity и сделать так, чтобы все дочерние действия унаследовали от вашей расширенной активности, так как таким образом вы реализуете тот же код (обработка службы) в 1 действии (родительском).
Activity -> MyParentActivity -> MyChildActivity1
Таким образом вы сможете преобразовать все свои дочерние действия в MyParentActivity и запустить свой собственный метод (который вы хотите реализовать)