2013-03-05 100 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