Обновление представлений вложенных действий TabActivity из фонового процесса - PullRequest
1 голос
/ 25 июля 2010

Я использую TabActivity (Main) с 3 TabSpecs. Я использую Intents для содержимого, например, 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 вместо TabA, TabB или TabC

Может быть, я полностью выбрал неправильный подход ко всему этому.

Я также много читал о том, что я не использую Действия для содержимого вкладки вместо использованияПросмотры.Однако я не знаю, какой вид использовать для замены моего <RelativeLayout />, поскольку я не могу использовать свой R.layout. * В качестве представлений.

Ответы [ 2 ]

2 голосов
/ 03 сентября 2010

Если вы измените common_data в sharedPreferences, вы также можете ввести OnSharedPreferenceChangeListener в Activites и проверить key.equals("common_data").

0 голосов
/ 27 июля 2010

Вы можете расширить Activity и сделать все ваши дочерние действия наследуемыми от вашей расширенной активности, так как таким образом вы будете реализовывать один и тот же код (управление службами) в 1 упражнении (родительском).

Activity -> MyParentActivity -> MyChildActivity1

Таким образом, вы сможете привести все ваши дочерние действия к MyParentActivity и запустить собственный метод (вы хотите его реализовать)

...