从父活动刷新选项卡列表视图

时间:2011-04-07 09:03:41

标签: android android-activity android-intent android-tabhost

您好我有一个应用程序,在登录后,加载一个主活动,其中包含一个包含3个包含listviews的选项卡的tabhost。每个选项卡都通过sqlite +自定义适配器填充。数据库最初通过xml数据填充(异步同步到sqlite数据库)。

我的问题:我想允许允许手动同步sqlite数据库和XML数据,然后更新当前选项卡列表视图。我让异步线程正常工作来进行数据库的后台更新。我无法弄清楚的是如何强制刷新当前选项卡的列表视图。问题是我不知道如何从父活动访问tabhost中的子活动。

我很确定notifyDataSetChanged()是我需要的但我无法弄清楚如何访问标签的活动>适配器来做到这一点。如何访问子活动适配器以调用notifyDataSetChanged()?父(包含)活动有一个按钮,用于刷新tabhost的列表视图。

另一种选择:我可以尝试从后台线程的onPostExecute()回调中广播一个意图。即,当它完成使用xml数据更新数据库时,我的标签接收广播并通过notifyDataSetChanged()触发它进行刷新...但这可能不是广播/接收意图的设计是如何正确的?即,在活动和包含标签的列表视图活动之间进行通信?

这是关于堆栈溢出的第二篇帖子我希望我的解释清楚。感谢您提供的任何帮助或建议

编辑(2012年1月16日): 自从我在这个问题上工作了很长时间。我最初使用广播意图并在儿童活动中消费它的解决方案。但是我已经接受了许多其他人的建议(你也应该这样做)!而是停止使用选项卡内的活动。我现在正在使用选项卡中的视图。这工作得更好,更清洁。

除了代码变得过于繁琐之外,当在纵向/横向上旋转偏差时,在活动之间进行时,我也变得奇怪的“数据库未关闭”类型错误。选项卡内的视图而不是活动修复了许多问题,我确信它在资源使用方面更好。

3 个答案:

答案 0 :(得分:2)

我刚刚完成了“a”解决方案。我基本上采用了上面提到的广播意图替代方案。

在我的AsyncTask任务的onPostExecute()方法中(包括我的XML与数据库的后台同步),让其他人想要这样做。我用:

提出了一个意图广播
    @Override
    protected void onPostExecute(Integer result) {
        Intent i = new Intent("com.myapp.app.DATA_REFRESH");
        sendBroadcast(i);

    }       

然后在tabhost>中标签活动我收到广播的意图:

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很新。

干杯, 罗布

答案 1 :(得分:1)

查看this主题。

我遇到类似的问题,我想刷新TabHost事件的标签。我定义了一个接口,我的所有Sub(Tab)活动都实现了,并从TabHost中调用Sub(Tab)Activity的消息(查看发布的onTouch()方法)。

答案 2 :(得分:-1)

请看这篇文章:

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

特别是这一行 tableRowAdapter.notifyDataSetChanged();

的问候, 的Matthias

相关问题