activitygroup的子activity中嵌套webview,利用webview与js交互,在实现js点击的内部类代码中实现activity跳转出现的线程问题

5 篇文章 0 订阅
1 篇文章 0 订阅

A:

1、好好说说这个问题,底部导航栏用的是tabhost,没有用fragment,因为一开始做的时候没要求用底部导航栏,所以其他的activity都做好了(例如地图、天气等),如果用fragment的话是没办法嵌套activity的,一定会出错的,所以只能用activitygroup来管理子activity,

2、第一个子activity中要嵌套webview,根据之前的文章,android4.2以后实现js和activity交互,必须在activity内部新建内部类来实现其方法。所以就在JsOperation类中的jumpMap()方法中实现由grouptab1控制该activity跳转到mapactivity,代码如下:

3、运行程序时报错,报错如图:

4、上网搜问题原因,是该方法必须在主线程中调用,把该方法拿到内部类的外面去,成为主类内部的方法,但是也不好使。

5、我就确定一下这段代码放在正常的方法中是否好使,我就在webview的布局上面添加了个按钮,根据按钮的监听事件来确定这段代码是否好使,一试果然好使,看来就是内部类的问题。

6、当时就觉得这段代码可能没办法在内部类中实现,是残缺的代码(当时的想法好幼稚,看来是知识储备决定其世界观啊)。就只能继续找寻其他的activitygroup控制activity跳转的代码了

B:

1、找到个音乐播放器的代码,它可以实现左右滑动的效果,将webview嵌套其中,利用js交互,点击地图按钮响应时,出现如下错误:

2、此时的错误代码是:

3、上网搜错误原因,是由于“如果将更新UI控件的代码写入到工作线程中便会报错”。错误如下:android.view.ViewRootImpl$CalledFromWrongThreadException: Only the original thread that created a view hierarchy can touch its views.
4、因为这样会阻塞住线程。

5、解决办法网上很多,就是利用thread和handle的post方法来更新控件,解决办法的例子如下:

6、按照这个办法修改代码,播放器的这个demo成功了

C:

1、我就反思了,能不能把这段代码应用到第一个出错的demo中,而且要是用播放器这个demo的话,因为它有很多效果,所以维护起来比较困难

2、把这个解决办法用到了第一个demo中,也好使。解决代码如下:

总结:

activity内部子类调用主线程(UI控件)的办法

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值