解决方案 »
- 利用Intent 进行Activity 事件以及页面跳转,出现异常终止?
- 短信防火墙,进来帮帮忙吧
- KEY相同。但覆盖不了前一个版本。
- 关于webView加载页面的问题
- 有关viewgroup与linearlayout的问题
- 如何让Android中的组件不响应触屏事件
- 安卓的app图标的位置可以代码移动吗?
- android bluetooth
- android .setText出错,找了很多答案还是不知道原因
- 添加问题成功 安卓编程问题求解,资源文件不能被引用。
- 怎么在Fragment的布局文件中的组件onclik调用Fragment的方法?
- scrollview中添加gridview,并更新UI
Method.invokeNative(Object, Object[], Class, Class[], Class, int, boolean) line: not available [native method]
Method.invoke(Object, Object...) line: 515
View$1.onClick(View) line: 3850
RadioButton(View).performClick() line: 4470
RadioButton(CompoundButton).performClick() line: 100
View$PerformClick.run() line: 18593
Handler.handleCallback(Message) line: 733
ViewRootImpl$ViewRootHandler(Handler).dispatchMessage(Message) line: 95
Looper.loop() line: 157
ActivityThread.main(String[]) line: 5867 执行步骤大概是:ViewRootHandler分发消息过来,触发View的点击事件,然后得知这个View是RadioButton类型(继承View而来),接着是Method.invokeNative,这个不用管,这里面执行的是c/c++的代码,估计是百度在算法方面做跨平台节省开发成本,iOS也是用这里面的代码,重点来了,setTraffic(View view)是怎么传View的?我找到了这个代码 <CheckBox
android:id="@+id/traffice"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_weight="1"
android:checked="false"
android:onClick="setTraffic"
android:text="交通图" />也就是里面onClick="setTraffic"起的作用,Activity里面有执行setContentView(R.layout.activity_layers);这里执行的其实是一个解析xml和然后根据解析结果调用Java代码的过程,当读到<CheckBox..../>这段代码的时候就会在渲染树里面new一个CheckBox对象,当读到android:onClick="setTraffic"这句属性的时候会执行
checkBox.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View view) {
// TODO Auto-generated method stub
Activity.this.setTraffic(view);
}
})
这样就把View传进来来,其实Activity.this.setTraffic(view);也不是这么直接执行的,我这里写的就当是伪代码吧,应该是JVM虚拟机有个查找函数的机制,根据"setTraffic"这个名字去查找当前Activity的setTraffic成员函数,如果找不到这个函数执行到这里报错崩溃,希望你能理解起初我也不懂这些机制,也是弄游戏开发后才慢慢懂得GUI框架大概的原理,以前也好奇XML是怎么表现成界面的,其实最终还是动态调用Java代码实现,搭成一棵渲染树一层层得把每个View渲染出来