2010-05-18 118 views
0

我有一個活動,其中ListView爲每一行保存自定義線性佈局元素。一個行具有被定義爲一個按鈕:爲什麼我的按鈕OnClick事件無法觸發?

<Button 
      android:text="Pick a contact" 
      android:id="@+id/btnPickContact" 
      android:layout_width="wrap_content" 
      android:gravity="center_vertical" 
      android:layout_height="wrap_content"></Button> 

然後在Java中,我有這樣的代碼:

((Button) row.findViewById(R.id.btnPickContact)).setOnClickListener(new View.OnClickListener() { 

       @Override 
       public void onClick(View v) { 
        Intent intent = new Intent(Intent.ACTION_PICK, ContactsContract.Contacts.CONTENT_URI); 
        intent.putExtra(EXTRA_ONLINE_ID, (String)v.getTag(TAG_ONLINE_ID)); 
        act.startActivityForResult(intent, PICK_CONTACT); 
       } 
      }); 

在此設置的情況下無法啓動。

而且我已經實現接口的嘗試:

@Override 
    public void onClick(View v) { 
      Intent intent = new Intent(Intent.ACTION_PICK, ContactsContract.Contacts.CONTENT_URI); 
      intent.putExtra(EXTRA_ONLINE_ID, (String)v.getTag(TAG_ONLINE_ID)); 
      startActivityForResult(intent, PICK_CONTACT); 
    } 

仍然沒有運氣,則不會觸發事件。

怎麼辦?

回答

2

在XML定義你需要使用的onclick =「somehandler」指定處理程序的按鈕。並在您的活動中有

public someHandler(View v) { 
} 

v將是按鈕。

+0

這是行不通的,但爲什麼必須這樣做? – Pentium10 2010-05-18 17:39:21

+0

這是用於編碼點擊事件監聽器的替代方法。實際上,這可以避免這個問題,解決了原來的問題。 – 2010-05-18 21:15:11

0

你確定它沒有開火的事件,而不是啓動意圖的問題嗎?

log.d("Mytest","OnClick Fired!!!");添加爲onClick中的第一行,然後查看您是否在調試日誌中獲得了消息。

+0

是的,我試過了。那裏沒有任何活動。 – Pentium10 2010-05-18 19:26:10

-1

試試這個 使用這種

(new OnClickListener(){.... 

,而不是這個

(new View.OnClickListener(){.... 

這裏是代碼...

((Button) row.findViewById(R.id.btnPickContact)).setOnClickListener(new OnClickListener() { 

      @Override 
      public void onClick(View v) { 
       Intent intent = new Intent(Intent.ACTION_PICK, ContactsContract.Contacts.CONTENT_URI); 
       intent.putExtra(EXTRA_ONLINE_ID, (String)v.getTag(TAG_ONLINE_ID)); 
       act.startActivityForResult(intent, PICK_CONTACT); 
      } 
     }); 
0

你應該考慮到點擊,並forcusable屬性設置爲行佈局。

@Override 
public View getView(int position, View convertView, ViewGroup parent) { 
     //Inflate view .... 

     button1.setOnClickListener(onclickListener);  
     convertView.setClickable(true); 
     convertView.setFocusable(true); 
     return converView; 
}