在Android SDK中执行按钮点击

9

一旦创建布局,我希望一个按钮能够自动点击,并使用button.performClick()实现。

问题在于它不起作用。 在onCreate,onStart,onResume方法期间,似乎我无法这样做。 按钮及其事件在何时创建,以便我可以对其执行单击操作?

这个

@Override
protected void onResume() {
    super.onResume();
    mybutton.performClick();
}

无法工作。


1
看看我的回答 http://stackoverflow.com/questions/14706886/how-can-get-x-and-y-position-of-an-image-in-android/14707052#14707052 - user370305
2
你确定使用 setContentView(), findViewById(), setOnClickListener()performClick() 操作无效吗?我只是好奇! - vault
它们可以工作。只是按钮没有被点击,但我没有收到任何错误信息。 - ali
4个回答

34

这在类似情况下对我有用:

mybutton.post(new Runnable(){
            @Override
            public void run() {
                 mybutton.performClick();
            }
});

这样可运行对象只会在按钮已经加载到布局上时才运行。

我喜欢这个可运行的帖子,但结果发现原帖作者做错了。-.- - vault

3

你需要使用一个ViewTreeObserver

    ViewTreeObserver vto = mybutton.getViewTreeObserver();
    vto.addOnGlobalLayoutListener(new OnGlobalLayoutListener() {
        @Override
        public void onGlobalLayout() {
            vto.removeOnGlobalLayoutListener(this);
            mybutton.performClick();
        }
    });

如果我要在API>16的设备上进行测试,那对于我的情况来说这将是一个不错的选择。 - ali

3

我闻到了一些问题,似乎你忘记给你的视图添加 onClicklistner。我测试了你的方法,它可以正常工作。

我做了类似于以下的事情:

全局定义按钮 Button btn;

onCreate() 中:

btn=(Button)findViewById(R.id.button);
            btn.setOnClickListener(new OnClickListener() {

                @Override
                public void onClick(View v) {

                    dialog();
                }
            });

并且在onResume()内部

@Override
    protected void onResume() {

        btn.performClick();
        super.onResume();
    }

它成功地显示了一个对话框!


是的,我设置了setOnTouchListener而不是setOnClickListener。谢谢。 - ali

0
@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.mylayout);

    myButton = (Button) findViewById(R.id.myButton);
    myButton.setOnClickListener(this);
}


@Override
public void onStart() {
    myButton.performClick();
}

@Override
public void onClick(View v) {
    // DO STUFF
}

有趣的是,他问了一个在问题中已经有答案的问题 :) - Niko

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接