9

创建布局后,我希望自动单击一个按钮并使用button.performClick()它。

问题是它不起作用。看起来我在这个onCreate, onStart, onResume方法中不能这样做。按钮及其事件是在什么时候创建的,所以我可以单击它?

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

不起作用。

4

4 回答 4

34

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

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

这样,只有当按钮已经加载到布局上时,runnable 才会运行。

于 2013-03-05T13:34:26.927 回答
3

您需要使用ViewTreeObserver

    ViewTreeObserver vto = mybutton.getViewTreeObserver();
    vto.addOnGlobalLayoutListener(new OnGlobalLayoutListener() {
        @Override
        public void onGlobalLayout() {
            vto.removeOnGlobalLayoutListener(this);
            mybutton.performClick();
        }
    });
于 2013-03-05T13:33:45.510 回答
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();
    }

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

于 2013-03-05T13:43:42.613 回答
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
}
于 2013-03-05T13:39:35.470 回答