在android中通过代码触发事件
想知道是否有任何方法可以通过编程方式构建和触发事件,例如android应用程序中的点击事件 谢谢 对不起,这个问题似乎不够清楚,让我再解释一下: 我有一个活动,让我们称之为具有多个视图的活动,例如5 ImageView。 一个普通的Java类叫它B,我的活动使用它。 在我的活动中有一个B的实例。 如果用户单击视图图像视图,视图OnClickListener将调用B中的方法 在B中,如果操作成功,它将再次调用活动中的方法。 在activity方法中,它将更改单击的ImageView的图像或状态。 另一方面: 单击活动中的视图x-->B.doSomething-->A.bIsDone-->更改视图x的图像 在正常执行的情况下,它工作正常,没有问题 问题是我想模拟这个过程是自动的,我的代码如下所示:在android中通过代码触发事件,android,Android,想知道是否有任何方法可以通过编程方式构建和触发事件,例如android应用程序中的点击事件 谢谢 对不起,这个问题似乎不够清楚,让我再解释一下: 我有一个活动,让我们称之为具有多个视图的活动,例如5 ImageView。 一个普通的Java类叫它B,我的活动使用它。 在我的活动中有一个B的实例。 如果用户单击视图图像视图,视图OnClickListener将调用B中的方法 在B中,如果操作成功,它将再次调用活动中的方法。 在activity方法中,它将更改单击的ImageView的图像或状态。
while (!b.isFinished()) {
try {
b.doSomething(<for View x>);
Thread.sleep(1000);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
我能为这个问题做些什么?我想通过代码在视图上生成一个点击事件,看看它是否有用
你的解决方案是什么?
谢谢在活动B中,创建一个
Handler mHandler=新处理程序
在B内的doSomething中,使用mHandler.postRunnable r更新图像视图。
Runnable应该包括如何更新UI的代码
问题可能是因为您试图使用线程更新B组件。我想您也可以使用RunNuithReadRunnable r
编辑问题前的原始答案
密钥的dispatchKeyEventKeyEvent事件
dispatchTouchEventMotionEvent for Touch
请参阅其他dispatchXXX功能。谷歌是你的朋友
以下是文档中dispatchKeyEvent的摘要
公共布尔dispatchKeyEventKeyEvent事件
将关键事件分派到焦点路径上的下一个视图。
此路径从视图树的顶部向下延伸到当前聚焦的视图。
如果此视图具有焦点,它将分派给自身。
否则,它将沿着焦点路径调度下一个节点。
此方法还激发任何键侦听器
在活动B中,创建一个
Handler mHandler=新处理程序
在B内的doSomething中,使用mHandler.postRunnable r更新图像视图。
Runnable应该包括如何更新UI的代码
问题可能是因为您试图使用线程更新B组件。我想您也可以使用RunNuithReadRunnable r
编辑问题前的原始答案
密钥的dispatchKeyEventKeyEvent事件
dispatchTouchEventMotionEvent for Touch
请参阅其他dispatchXXX功能。谷歌是你的朋友
以下是文档中dispatchKeyEvent的摘要
公共布尔dispatchKeyEventKeyEvent事件
将关键事件分派到焦点路径上的下一个视图。
此路径从视图树的顶部向下延伸到当前聚焦的视图。
如果此视图具有焦点,它将分派给自身。
否则,它将沿着焦点路径调度下一个节点。
此方法还激发任何键侦听器
我不确定你所说的构建和启动一个事件是什么意思,也不确定是基于哪个上下文,即从一个视图、活动或服务,但我会尝试一下 要创建密钥事件,只需使用KeyEvent构造函数 对于MotionEvents,您可以从[here][1]使用静态获取方法 如果要激发它们,请在目标活动上使用前面提到的方法,如果在视图中,则可以将其作为上下文getContext获取 希望它有帮助,如果没有,请提供更多的细节和/或示例代码
[1] :,long,int,float,float,int我不确定您所说的构建和启动事件是什么意思,也不确定是基于哪个上下文,即从视图、活动或服务,但我会尝试一下 要创建密钥事件,只需使用KeyEvent构造函数 对于MotionEvents,您可以从[here][1]使用静态获取方法 如果要激发它们,请在目标活动上使用前面提到的方法,如果在视图中,则可以将其作为上下文getContext获取 希望它有帮助,如果没有,请提供更多的细节和/或示例代码
[1] :,long,int,float,float,int如果您谈论的是监听器,比如OnClickListener,那么是的:您可以创建自己的监听器并触发它们 基本上,您首先要为该侦听器定义一个接口。对于一个DaterTimePicker,它有一个我曾经使用过的DaterPicker和TimerPicker小部件
public interface OnDateTimeSetListener {
public abstract void onDateTimeSet(DatePicker datePicker, TimePicker timePicker);
}
接口定义了一个必须由侦听器实现的方法
然后在你的课堂上你做了
public class DateTimePickerDialog extends AlertDialog {
private OnDateTimeSetListener onDateTimeSetListener;
private DatePicker datePicker;
private TimePicker timePicker;
public void setOnDateTimeListener(OnDateTimeSetListener l) {
this.onDateTimeSetListener = l;
}
private onDateTimeSet() {
if(onDateTimeSetListener!=null)
onDateTimeSetListener.onDateTimeSet(this.datePicker, this.timePicker);
}
private doSomething() {
// Do your code here
// fire up the event once finished
onDateTimeSet();
}
}
setOnDateTimeListener用于从类外即在您的主要活动中设置侦听器
onDateTimeSet在内部使用,因此声明为private以触发事件,并检查onDateTimeSetListener是否为
设置,否则如果未设置,我们将得到NullPointerException。如果已设置,则调用它的onDateTimeSet方法
在您的主要活动中,您只需向其中添加一个侦听器并添加所需的代码,如:
DateTimePicker dateTimePicker = (DateTimePicker)findViewById(R.id.datetime);
dateTimePicker.setOnDateTimeListener(new OnDateTimeSetListener () {
void onDateTimeSet(DatePicker datePicker, TimePicker timePicker) {
// Date/Time was changed
Log.d("OnDateTimeSet", "Date/time was updated");
}
});
在这里,设置侦听器的方法与设置onclick侦听器的方法相同
对于一个简单的事件,您必须执行相当多的代码,但据我所知,这是实现这一点的正确方法。如果您谈论的是监听器,如OnClickListener,那么是的:您可以创建自己的监听器并触发它们 基本上,您首先要为该侦听器定义一个接口。对于一个DaterTimePicker,它有一个我曾经使用过的DaterPicker和TimerPicker小部件
public interface OnDateTimeSetListener {
public abstract void onDateTimeSet(DatePicker datePicker, TimePicker timePicker);
}
接口定义了一个必须由侦听器实现的方法
然后在你的课堂上你做了
public class DateTimePickerDialog extends AlertDialog {
private OnDateTimeSetListener onDateTimeSetListener;
private DatePicker datePicker;
private TimePicker timePicker;
public void setOnDateTimeListener(OnDateTimeSetListener l) {
this.onDateTimeSetListener = l;
}
private onDateTimeSet() {
if(onDateTimeSetListener!=null)
onDateTimeSetListener.onDateTimeSet(this.datePicker, this.timePicker);
}
private doSomething() {
// Do your code here
// fire up the event once finished
onDateTimeSet();
}
}
setOnDateTimeListener用于从类外即在您的主要活动中设置侦听器
onDateTimeSet在内部使用,因此声明为private来触发事件,并检查onDateTimeSetListener是否已设置,否则如果未设置,我们将获得NullPointerException。如果已设置,则调用它的onDateTimeSet方法
在您的主要活动中,您只需向其中添加一个侦听器并添加所需的代码,如:
DateTimePicker dateTimePicker = (DateTimePicker)findViewById(R.id.datetime);
dateTimePicker.setOnDateTimeListener(new OnDateTimeSetListener () {
void onDateTimeSet(DatePicker datePicker, TimePicker timePicker) {
// Date/Time was changed
Log.d("OnDateTimeSet", "Date/time was updated");
}
});
在这里,设置侦听器的方法与设置onclick侦听器的方法相同
对于一个简单的事件来说,这是相当多的代码,但据我所知,这是实现这一点的正确方法。我的问题是关于构建和触发事件,而不是处理它们。@mohammad,你在说什么?onKeyUp、onKeyDown处理消息,dispatchKeyEvent用于触发事件。也许你应该更好地表达你的问题。@mohammad,View.performClick可以模拟点击。如果你只想点击一下。@mohammad,现在,你的描述更好了,我相应地更新了我的答案。我的问题是关于建造和发射事件,而不是处理它们。@mohammad,你在说什么?onKeyUp、onKeyDown处理消息,dispatchKeyEvent用于触发事件。也许你应该更好地表达你的问题。@mohammad,View.performClick可以模拟点击。如果你只想点击一下。@mohammad,现在,你的描述更好了,我相应地更新了我的答案。