2010-05-18 119 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; 
}