Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/216.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 从父活动刷新选项卡列表视图_Android_Android Activity_Android Intent_Android Tabhost - Fatal编程技术网

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

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

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

我的问题:我想允许手动同步sqlite数据库和XML数据,然后更新当前选项卡listview。我的异步线程工作正常,可以对数据库进行后台更新。我不知道如何强制刷新当前选项卡的listview。问题是我不知道如何从父活动访问tabhost中的子活动

我很确定notifyDataSetChanged()是我所需要的,但我不知道如何访问选项卡的activity>adapter来实现这一点。如何访问子活动适配器以调用notifyDataSetChanged()?父(包含)活动有一个按钮,用于刷新tabhost的listview

另一种选择:我可以尝试从后台线程的onPostExecute()回调中广播意图。也就是说,当它完成用xml数据更新数据库时,我让我的选项卡接收广播并通过notifyDataSetChanged()触发它刷新。。。但这可能不是广播/接收意图的设计方式,对吗??即,在活动和包含的选项卡的listview活动之间进行通信

这是我关于堆栈溢出的第二篇文章,我希望我的解释已经很清楚了。感谢您提供的任何帮助或建议

编辑(2012年1月16日): 我已经很久没有研究过这个问题了。我最初使用的解决方案是广播意图并在儿童活动中使用它。但是我从那以后接受了很多其他人的建议(你也应该如此)!而是停止在选项卡中使用活动。我现在正在使用选项卡中的视图。这工作得更好更干净


除了代码变得过于繁琐之外,在活动之间进行操作时,以及在从纵向/横向旋转设备时,我也会遇到奇怪的“数据库未关闭”类型错误。选项卡中的视图而不是活动修复了许多问题,我相信这在资源使用方面会更好

我刚刚完成了“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,无法对此解决方案发表评论。但是,您是如何在选项卡视图中刷新列表视图的?但是,您是如何在选项卡视图中刷新列表视图的?