Android 从父活动刷新选项卡列表视图
您好,我有一个应用程序,它在登录后加载一个主活动,其中包含一个tabhost和3个包含ListView的选项卡。每个选项卡都通过sqlite+自定义适配器填充。数据库最初是通过xml数据填充的(与sqlite数据库异步同步) 我的问题:我想允许手动同步sqlite数据库和XML数据,然后更新当前选项卡listview。我的异步线程工作正常,可以对数据库进行后台更新。我不知道如何强制刷新当前选项卡的listview。问题是我不知道如何从父活动访问tabhost中的子活动 我很确定notifyDataSetChanged()是我所需要的,但我不知道如何访问选项卡的activity>adapter来实现这一点。如何访问子活动适配器以调用notifyDataSetChanged()?父(包含)活动有一个按钮,用于刷新tabhost的listview 另一种选择:我可以尝试从后台线程的onPostExecute()回调中广播意图。也就是说,当它完成用xml数据更新数据库时,我让我的选项卡接收广播并通过notifyDataSetChanged()触发它刷新。。。但这可能不是广播/接收意图的设计方式,对吗??即,在活动和包含的选项卡的listview活动之间进行通信 这是我关于堆栈溢出的第二篇文章,我希望我的解释已经很清楚了。感谢您提供的任何帮助或建议 编辑(2012年1月16日): 我已经很久没有研究过这个问题了。我最初使用的解决方案是广播意图并在儿童活动中使用它。但是我从那以后接受了很多其他人的建议(你也应该如此)!而是停止在选项卡中使用活动。我现在正在使用选项卡中的视图。这工作得更好更干净Android 从父活动刷新选项卡列表视图,android,android-activity,android-intent,android-tabhost,Android,Android Activity,Android Intent,Android Tabhost,您好,我有一个应用程序,它在登录后加载一个主活动,其中包含一个tabhost和3个包含ListView的选项卡。每个选项卡都通过sqlite+自定义适配器填充。数据库最初是通过xml数据填充的(与sqlite数据库异步同步) 我的问题:我想允许手动同步sqlite数据库和XML数据,然后更新当前选项卡listview。我的异步线程工作正常,可以对数据库进行后台更新。我不知道如何强制刷新当前选项卡的listview。问题是我不知道如何从父活动访问tabhost中的子活动 我很确定notifyDat
除了代码变得过于繁琐之外,在活动之间进行操作时,以及在从纵向/横向旋转设备时,我也会遇到奇怪的“数据库未关闭”类型错误。选项卡中的视图而不是活动修复了许多问题,我相信这在资源使用方面会更好 我刚刚完成了“a”解决方案的实施。我基本上采用了我上面提到的广播意图替代方案 如果其他任何人想这样做,请使用我任务的onPostExecute()方法(它执行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()用于使用数据库中的新数据更新listview
嗯,这似乎对我有用,如果有人对更好的方法有建议,请让我知道。我对安卓系统还很陌生
干杯,
Rob我刚刚完成了“a”解决方案的实施。我基本上采用了我上面提到的广播意图替代方案 如果其他任何人想这样做,请使用我任务的onPostExecute()方法(它执行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()用于使用数据库中的新数据更新listview
嗯,这似乎对我有用,如果有人对更好的方法有建议,请让我知道。我对安卓系统还很陌生
干杯,
罗伯看看这条线
我遇到了一个类似的问题,我想刷新TabHost事件的选项卡。我定义了一个接口,我的所有子(选项卡)活动都实现了该接口,并从TabHost调用了子(选项卡)活动的消息(查看发布的onTouch()
方法)。查看线程
我遇到了一个类似的问题,我想刷新TabHost事件的选项卡。我定义了一个接口,用于实现我的所有子(选项卡)活动,并从TabHost调用子(选项卡)活动的消息(请查看发布的
onTouch()
方法)。谢谢KClaszen,通过它可以很好地了解子选项卡活动的上下文。我可以尝试改变我的方式(例如View-currentView=getTabHost().getCurrentView();Context-currentViewContext=currentView.getContext();
你认为使用像我这样的意图广播/接收实现做事情有什么缺点吗?我会给你打分数,但声誉不够:)@wired00不幸的是,我还没有使用intent广播,无法对此解决方案发表评论。感谢KClaszen,这看起来很好,您可以了解子选项卡活动的上下文。我可以尝试改变我的方式(例如View-currentView=getTabHost().getCurrentView();Context-currentViewContext=currentView.getContext();
你认为使用像我这样的意图广播/接收实现做事情有什么缺点吗?我会给你打分数,但声誉不够:)@wired00很遗憾,我尚未使用intent broadcast,无法对此解决方案发表评论。但是,您是如何在选项卡视图中刷新列表视图的?但是,您是如何在选项卡视图中刷新列表视图的?