2013-03-05 76 views
2

一旦创建布局,我想要一个按钮自动点击,我使用button.performClick()在Android SDK中执行点击按钮

问题是它不起作用。看起来我在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 2013-03-05 13:30:44

+2

是你吗?确保'setContentView()','findViewById()','setOnClickListener()'和'performClick()'不起作用?我只是好奇! – vault 2013-03-05 13:33:11

+0

他们工作。该按钮只是没有点击,但我没有得到任何错误 – ali 2013-03-05 13:36:35

回答

21

这在类似的情况下,工作对我来说:

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

这样,如果按钮已经被加载在布局上可运行的将只运行。

+0

我喜欢但事实证明,OP是做错了 - - – vault 2013-03-05 13:47:17

2

您需要使用ViewTreeObserver

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

如果我在API> 16 – ali 2013-03-05 13:45:37

+0

设备上测试这是一个很好的选择ViewTreeObserver已经存在API 1 ... – 2013-03-05 13:46:59

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 
} 
+0

OP说这是行不通的 – vault 2013-03-05 13:45:02

+0

我刚测试这个,并正常工作... – Niko 2013-03-05 13:47:00

+0

是的抱歉,OP是做错了 – vault 2013-03-05 13:47:40

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(); 
    } 

它成功显示对话框!

+0

是的,我有setOnTouchListener而不是setOnClickListener。谢谢 – ali 2013-03-05 13:46:31

+0

大声笑,所以我是真的:D – vault 2013-03-05 13:46:46