2 liangjifanzhuan2 liangjifanzhuan2 于 2016.04.24 17:17 提问

安卓数据库改变后,界面的刷新问题 1C

目前学习中遇到的一个问题,希望大神给予解决。
我的activity继承自tabActivity, 给里面的tabhost添加或者删除一个选项的时候,后台的数据库已经才做成功了。但是界面上的东西没办法立即刷新。
需要我退出当前activity然后再重新进来才能将界面刷新。

之前用的listview也存在这个问题,我用notifyDataSetChanged();这个函数解决了。但是现在是tabhost的选项卡添加问题,不知道怎么弄。

小弟刚学安卓,对一些基本的东西可能还不懂,希望有人能帮我找到解决这个问题的方法,万分感谢!

9个回答

baidu_23086307
baidu_23086307   2016.04.24 18:06

有具体代码吗?给代码看看

erichk2008
erichk2008   2016.04.24 18:35

你好,我也是新手,所以了解的可能不完全对。

百度了一下发现,在Android 4.0之后 Fragment取代了tabActivity,目前实现TabActivity的效果,用的比较多的是Fragment+ViewPager,你可以考虑优先研究这2个,在实际开发中用这两个的也比较多。

我没有用过tabActivity,也没看到你的代码,感觉你的意思是在onCreate()方法初始化页面之后,在用户操作时动态对tabhost进行删改,逻辑上虽然进行了更改,但是没有调用刷新页面的方法,所以你的Activity的页面是没有变化的。可以研究一下有没有对应的刷新页面的方法。

liangjifanzhuan2
liangjifanzhuan2 我现在就是找不到刷新方法= =!`好急
一年多之前 回复
q610098308
q610098308   2016.04.24 21:34

view.invalidate();
重新绘制一下就可以了;

liangjifanzhuan2
liangjifanzhuan2 我也查了网上说可以用这个,但是涉及到什么线程啥的,我就晕了···不知道怎么用
一年多之前 回复
q610098308
q610098308   2016.04.24 22:57

肯定需要在主线程刷新;
private View mContentView;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
requestWindowFeature(Window.FEATURE_NO_TITLE);
mContentView = LayoutInflater.from(this).inflate(R.layout.activity_note, null);
setContentView(mContentView);

    要刷新的就是整个 view ;

    如果你是点击触发的,处理完后刷新一下就可以:
        @Override
public void onClick(View v) {
  mContentView.invalidate()
    }
liangjifanzhuan2
liangjifanzhuan2 我在下面回复你了,大神帮我再看看吧 ,谢谢了!
一年多之前 回复
liangjifanzhuan2
liangjifanzhuan2   2016.04.26 16:00

你好,我用这种方法试了下还是不行啊

这个是我onCreate方法里的代码
handler = new Handler(){
@Override
public void handleMessage(Message msg){
super.handleMessage(msg);
if(msg.what ==1){
Log.i("日志","handle接受消息成功");
cursorTab.requery();
textView.invalidate();
Log.i("日志", "刷新函数textView.invalidate();已经执行");
}
}
};
handler是 定义在activity中的 static public Handler handler;

            然后在另一个java文件中代码如下
            Message message=new Message();
            message.what=1;
            Log.i("日志", "删除子项目");
            AtyText.handler.sendMessage(message);


                            最后日志打印出了  
            04-26 15:49:58.235 8126-8126/com.example.administrator.text20160310 I/日志: handle接受消息成功

04-26 15:49:58.236 8126-8126/com.example.administrator.text20160310 I/日志: 刷新函数textView.invalidate();已经执行
说明那个刷新的函数执行了啊,为什么界面还是没变?要怎么才能解决
我实在是基础不行,还望见谅···谢谢了

q610098308
q610098308   2016.04.26 16:22

你把界面截图出来吧,现在根本不清楚你出来的是什么样子。

liangjifanzhuan2
liangjifanzhuan2 已经有图了···谢谢··
一年多之前 回复
liangjifanzhuan2
liangjifanzhuan2   2016.04.26 21:18

图片说明
这个是界面的图,我用的tabActivity ,创建tabhost的时候是用的一个数组str1用for循环添加出来的

现在我点那个加号,进行操作,把后台数据库改了(就是数组str1),现在要怎么实现 这个tab刷新出新的结果来, 目前我看有重新启动activity调用onCreate方法后才能改变。 我的tabhost的添加操作是在onCreate方法中的。

q610098308
q610098308   2016.04.27 09:33

1.我估计你也用到了 Adapter 也需要进行相应的通信数据改变,以刷新界面;
2.如果你用的是 FragmentPagerAdapter可以用notifyDataSetChanged(),在添加数据后刷新;

sinat_21406675
sinat_21406675   2016.04.27 09:52

监听数据库的变化 使用内容观察者

Csdn user default icon
上传中...
上传图片
插入图片
准确详细的回答,更有利于被提问者采纳,从而获得C币。复制、灌水、广告等回答会被删除,是时候展现真正的技术了!