如何使用代码模拟按钮单击?


216

如何使用Android中的代码触发按钮点击事件?我想在发生其他事件时以编程方式触发按钮单击。

我面临的同样问题

public void onDateSelectedButtonClick(View v){
    /*Something  Alarm Management 
    http://www.java2s.com/Code/Android/Core-Class/Alarmdemo.htm
    copied code from this site*/
}

按钮代码:

<Button
    android:onClick="onDateSelectedButtonClick"
    android:text="Set notification for this date" />

但是我想在没有OnClickEvent的情况下调用该函数OnLoadLayout


您能指出问题吗?你为什么要那?您是否要触发一些要执行的代码?
弗拉基米尔·伊万诺夫

是的,我想触发按钮单击执行的代码。
山姆

Answers:


445

有个更好的方法。

View.performClick();

http://developer.android.com/reference/android/view/View.html#performClick()

这应该可以解决您的所有问题。每个View都会继承此功能,包括Button,Spinner等。

只是为了澄清,View没有静态的performClick()方法。您必须在View实例上调用performClick()。例如,您不能只打电话

View.performClick();

相反,请执行以下操作:

View myView = findViewById(R.id.myview);
myView.performClick();

2
但是View for Android的后退按钮是什么?
2011年

4
手机上的后退按钮没有“查看”。您需要使用按键监听器来按下这些按钮。完全是另一个问题。
moonlightcheese

3
@moon-如果您想让其他人知道您的评论,请以“ @”开头,并以您要通知的用户的前几个字母开头...。(发表评论的作者会自动收到通知,但评论者会不是)
Peter Ajtai 2012年

14
此答案中显示的代码有些混乱。为了澄清起见,View没有静态的performClick()方法。您必须在View实例上调用performClick()。
卢卡斯Wiklendt

3
如果您不知道自己在做什么,只会让人感到困惑。
moonlightcheese

52

只是为了阐明Moonlightcheese所说的内容:要通过Android中的代码触发按钮单击事件,请提供以下内容:

buttonName.performClick();


7

根据我的经验,Android callOnClick()在API 15中添加)有时可能是的更好选择performClick()。如果用户启用了选择声音,则performClick()可能会导致用户听到两个连续的选择声音,这些声音在彼此的顶部有些分层,这可能会引起不适。(一个选择声音代表用户的第一个按钮单击,然后另一个声音代表OnClickListener您正在通过代码调用的另一个按钮。)


7

只需编写以下简单的代码行:

button.performClick();

其中button是Button类的引用变量,其定义如下:-

private Button buttonToday ;
buttonToday = (Button) findViewById(R.id.buttonToday);

而已。


6

从API15开始,您还可以使用callOnClick()直接调用附加视图OnClickListener的方法。与performClick()不同,此方法仅调用侦听器,而不执行任何相关的单击操作,例如报告可访问性事件。


4

如果不使用该sender参数,为什么不重构按钮处理程序实现以分离功能,然后从所需的任何位置(从按钮处理程序和其他位置)调用它。

无论如何,这是一个更好,更简洁的设计-需要在按钮处理程序上调用的代码,并且应该从其他地方调用该代码以重构为自己的功能。另外,它将帮助您将UI处理与应用程序逻辑代码分开。您还将对函数有一个漂亮的名字,而不仅仅是onDateSelectedButtonClick()。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.