我的目标是制作每行的ListView,其中包含一个占据每行中整个空间的按钮。下面是onItemClick方法不起作用的代码。有人知道它为什么不起作用吗?
我有下一堂课活动:
public class MyActivity extends Activity implements OnItemClickListener {
public void onCreate(Bundle savedInstanceState) {
//
//Here is a lot of code..
//.....
List<String> items = new ArrayList<String>();
ListView lv = (ListView) findViewById(R.id.listView);
if (result.getItems().size() > 0) {
// Init list view
lv.setVisibility(lv.VISIBLE);
lv.setTextFilterEnabled(true);
lv.setAdapter(new buttonAdapter(this, R.layout.list_item,
items));
lv.setOnItemClickListener(this);
}
}
public void onItemClick(AdapterView<?> parent, View view, int position,long id) {
//....
}
}
以下是ListView中每行的XML元素:
<Button xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/list_item_button"
android:layout_gravity="center_vertical"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:padding="10dp"
android:textStyle="bold"
android:textSize="16sp">
</Button>
答案 0 :(得分:3)
onItemClick仅在单击项目本身时触发。如果您有TextView或TextView以及ImageView而不是Button,则单击该项将触发onItemClick。
如果要响应按钮单击,可以为适配器中的每个按钮设置onClickListener。然后使用传递给侦听器的视图引用来区分项。
但是,如果您确实需要触发onItemClick,则需要添加属性
android:descendantFocusability="beforeDescendants"
到布局XML中的ListView标记 这使得ListView首先处理点击。
至于为什么你想要一个填充整个listitem的按钮而不是让listitem本身可以点击,这仍然没有多大意义。你应该做其中一个,因为无论你做什么,实际上只会点击其中一个。
答案 1 :(得分:0)
如果要放在listview项目上的按钮占据整个项目的宽度和高度,则onItemClickListener
将不会被占用,因为没有内容空间可供点击/触摸。您可以为按钮实施onClickListener()
(或onTouchListener()
)。但是为什么按钮,你可以在没有按钮的情况下做同样的事情,只需点击listview项目就可以了。