为什么我的按钮OnClick事件无法触发?

时间:2010-05-18 17:27:34

标签: android button onclick

我有一个活动,其中ListView为每一行保存自定义的线性布局元素。其中一行有一个定义为的按钮:

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

仍然没有运气,事件不会发生。

怎么办?

5 个答案:

答案 0 :(得分:2)

在定义按钮的xml中,您需要使用onclick =“somehandler”指定处理程序。在你的活动中有

public someHandler(View v) {
}

v将是按钮。

答案 1 :(得分:0)

编辑:我认为这可能会回答您的问题:Android: ListView elements with multiple clickable buttons

答案 2 :(得分:0)

你确定它的事件没有解雇而且没有启动意图的问题吗?

添加log.d("Mytest","OnClick Fired!!!");作为onClick的第一行,然后查看您是否在调试日志中收到了消息。

答案 3 :(得分:0)

您应该考虑将可点击和可原谅的属性设置为行布局。

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

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

答案 4 :(得分:-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);
            }
        });