【发布时间】:2015-07-28 13:02:16
【问题描述】:
我试图在每个列表项中放置一个按钮。思路是这样的:
文本1____________[btn]
文本2____________[btn]
等等……
项目的 XML 是:
<RelativeLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:descendantFocusability="blocksDescendants">
<TextView xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:minHeight="?android:attr/listPreferredItemHeight"
android:gravity="center_vertical"
android:id="@+id/list_item_textview"/>
<ImageButton
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:id="@+id/deleteButton"
android:layout_centerVertical="true"
android:layout_alignParentRight="true"
android:layout_alignParentEnd="true"
android:background="@null"
android:clickable="true"
android:focusable="false"
android:src="@drawable/ic_delete_black_24dp"/>
</RelativeLayout>
有两个活动共享同一个片段。此片段使用 SimpleCursorAdapter 从数据库中获取数据。效果很好。
创建和设置适配器后,我尝试找到按钮并执行 setOnClickListener。这不起作用。
下面是片段中onCreateView方法的代码:
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
View rootView = inflater.inflate(R.layout.fragment_item_scroll, container, false);
ListView listView = (ListView) rootView.findViewById(R.id.listview_item);
SimpleCursorAdapter adapter = new SimpleCursorAdapter(
getActivity(),
R.layout.list_item,
((ListItems)getActivity()).getCursor(1,1),
new String[] {((ListItems) getActivity()).getColumnName()},
new int[] {R.id.list_item_textview}, 0);
listView.setAdapter(adapter);
listView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
Intent intent = new Intent(getActivity(), ((ListItems) getActivity()).getGoToClass());
intent.putExtra("apiary_id",(int) id);
intent.putExtra("hive_id", -1);
startActivity(intent);
}
});
/* SOMEWHERE BELOW IS THE PROBLEM */
View list_item_view = inflater.inflate(R.layout.list_item, container, false);
ImageButton deleteButton = (ImageButton) list_item_view.findViewById(R.id.deleteButton);
System.out.println("====================>" + deleteButton.toString()); //This prints something which includes the id of the button, so it is finding it.
deleteButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
System.out.println("THIS IS NOT WORKING!!!!");
}
});
return rootView;
}
这是我的第一个 android 应用程序,我遇到这个问题几天了,没有任何进展。非常感谢任何提示!
非常感谢!
【问题讨论】:
-
感谢您的评论。然而,这不是我的问题。我可以单击按钮以及列表项。问题是虽然我可以点击按钮,但按钮不会触发 SetOnClickListener。
-
尝试先记录
Log.e("message","your message");而不是s.o.p,然后检查那里是否显示消息 -
在您的 BaseAdapter 或您正在使用的任何适配器中实现您的点击侦听器。而且我建议您编写自己的自定义适配器,因为不推荐使用 SimpleCursorAdapter。你可以使用 RecyclerView。
-
在适配器中调用 getview() 方法时实现 onclicklistener() 方法
标签: android listview button onclicklistener simplecursoradapter