我有一个活动,其中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);
}
仍然没有运气,事件不会发生。
怎么办?
答案 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);
}
});