Обновить вид списка вкладок из родительской активности - PullRequest
0 голосов
/ 07 апреля 2011

Привет, у меня есть приложение, которое после входа в систему загружает основное действие, которое содержит вкладку с 3 вкладками, содержащими списки.Каждая вкладка заполняется через sqlite + пользовательский адаптер.База данных изначально заполняется данными XML (синхронно синхронизируется с базой данных sqlite).

Моя проблема: Я хочу разрешить ручную синхронизацию базы данных sqlite с данными XML, чтозатем обновляет текущий вид списка вкладок.У меня асинхронный поток работает нормально, чтобы сделать фоновое обновление базы данных.То, что я не могу понять, это как заставить обновление списка текущей вкладки.Проблема в том, что я не знаю, как получить доступ к дочернему действию на вкладке из родительского действия.

Я вполне уверен, что notifyDataSetChanged () - это то, что мне нужно, но я не могу понять, как получить доступ к адаптеру активности вкладки>, чтобы сделать это.Как получить доступ к адаптеру дочерних действий для вызова notifyDataSetChanged ()?Родительское (содержащее) действие имеет кнопку, которая будет использоваться для обновления списка просмотра tabhost.

Альтернатива : я мог бы попытаться передать намерение из обратного вызова onPostExecute () моего фонового потока.то есть, когда он заканчивает обновление базы данных данными xml, моя вкладка получает широковещательную рассылку и запускает ее обновление через notifyDataSetChanged () ... но это, вероятно, НЕ то, как предназначены намерения широковещательной передачи / приема, верно?то есть, общение между действием и активным представлением списка в виде вкладки?

Это мой второй пост о переполнении стека. Надеюсь, я объяснил свое объяснение.Спасибо за любую помощь или совет, который вы можете предоставить

РЕДАКТИРОВАТЬ (16 января 2012): Прошло много времени с тех пор, как я работал над этой проблемой.Первоначально я использовал решение о передаче намерения и потребления его в детской деятельности.НО я с тех пор воспользовался советом многих других (и вы тоже должны)!и вместо этого прекратил использовать Действия внутри вкладок.Сейчас я использую представления во вкладках.Это работает НАМНОГО лучше и чище.

Кроме того, что код становился слишком громоздким, я также получал странные ошибки типа «База данных не закрыта» при переходе между действиями, а также при повороте отклонения от портрета / ландшафта.Виды во вкладках вместо действий исправили много проблем, и я уверен, что лучше использовать ресурсы.

Ответы [ 3 ]

2 голосов
/ 07 апреля 2011

Я только что закончил реализацию "а" решения. Я в основном пошел с альтернативой намерения вещания, которую я упоминал выше.

Если кто-то еще захочет сделать это таким образом, в методе onPostExecute () моей задачи AsyncTask (которая выполняет фоновую синхронизацию моего XML с базой данных). Я поднимаю намеренную трансляцию с:

    @Override
    protected void onPostExecute(Integer result) {
        Intent i = new Intent("com.myapp.app.DATA_REFRESH");
        sendBroadcast(i);

    }       

Затем в рамках действия tabhost> tab я получаю это намерение с:

public class updaterBroadcastReceiver extends BroadcastReceiver {       
        @Override
        public void onReceive(Context context, Intent intent) {
            fillData(); // rebuild my listview with new database data
        }
}

Зарегистрируйте / настройте вышеуказанный намеренный приемник с помощью:

@Override
public void onResume(){         
         IntentFilter filter = new IntentFilter("com.myapp.app.DATA_REFRESH");
         updaterBroadcastReceiver r = new updaterBroadcastReceiver();
         registerReceiver(r,filter);

         super.onResume();
}   

FillData () используется для обновления представления списка новыми данными из базы данных.

Что ж, мне кажется, что это работает, если у кого-то есть предложения по лучшему способу сделать это, пожалуйста, дайте мне знать. Я совершенно новичок в Android.

Ура, Rob

1 голос
/ 07 апреля 2011

Посмотрите на эту тему.

У меня была похожая проблема, когда я хотел обновить вкладку для события TabHost. Я определил Интерфейс, в котором реализованы все мои действия Sub (Tab), и вызвал сообщение для Sub (Tab) Activity из TabHost (посмотрите на опубликованный метод onTouch()).

0 голосов
/ 07 апреля 2011

см. Эту статью:

http://www.codegod.de/WebAppCodeGod/aendroid-ImageButtons-in-ListView-with-RelativeLayout-AID589.aspx

Особенно эта строка таблицыRowAdapter.notifyDataSetChanged ();

привет, Матиас

...