在android中通过代码触发事件

在android中通过代码触发事件,android,Android,想知道是否有任何方法可以通过编程方式构建和触发事件,例如android应用程序中的点击事件 谢谢 对不起,这个问题似乎不够清楚,让我再解释一下: 我有一个活动,让我们称之为具有多个视图的活动,例如5 ImageView。 一个普通的Java类叫它B,我的活动使用它。 在我的活动中有一个B的实例。 如果用户单击视图图像视图,视图OnClickListener将调用B中的方法 在B中,如果操作成功,它将再次调用活动中的方法。 在activity方法中,它将更改单击的ImageView的图像或状态。

想知道是否有任何方法可以通过编程方式构建和触发事件,例如android应用程序中的点击事件

谢谢

对不起,这个问题似乎不够清楚,让我再解释一下:

我有一个活动,让我们称之为具有多个视图的活动,例如5 ImageView。 一个普通的Java类叫它B,我的活动使用它。 在我的活动中有一个B的实例。 如果用户单击视图图像视图,视图OnClickListener将调用B中的方法 在B中,如果操作成功,它将再次调用活动中的方法。 在activity方法中,它将更改单击的ImageView的图像或状态。 另一方面:

单击活动中的视图x-->B.doSomething-->A.bIsDone-->更改视图x的图像

在正常执行的情况下,它工作正常,没有问题

问题是我想模拟这个过程是自动的,我的代码如下所示:

        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,现在,你的描述更好了,我相应地更新了我的答案。