我创建了一个名为ListItem的基本类,它只存储两个字符串和一个整数。
这是我在RecyclerView中的物品的容器。
我试图让ListItems可点击,所以我让ListItem扩展了View类。然后添加了一个OnClickListener并进行设置。它没有奏效。我通过使用TOAST创建一条短消息进行测试但没有显示。有谁知道为什么?
ListItem类:
public ListItem(String title, String date, int url, Context context, AttributeSet attrs){
super(context, attrs);
this.title = title;
this.date = date;
this.url = url;
}
...创建ListItems的类......
private AttributeSet attrs;
ListItem y = new ListItem(title, date, a, this.getContext(), attrs);
View.OnClickListener mFan = new View.OnClickListener()
{
public void onClick(View v)
{
Toast.makeText(getActivity(), "TEST" , Toast.LENGTH_SHORT).show();
}
};
y.setOnClickListener(mFan);
答案 0 :(得分:2)
View类中有一种方法。
y.setClickable(true);
您可能还需要为ListView执行此操作。
myListView.setClickable(true);
答案 1 :(得分:2)
在RecyclerView中实现项目点击监听器有点不同。
我假设您已经实现了自己的自定义RecyclerViewAdpater,它应该是这样的。您必须在其中实现自己的OnClickListener接口。
public class CustomRecyclerViewAdapter extends RecyclerView.Adapter<RecyclerView.ViewHolder> {
private List<ListItem> listItems;
private static OnListItemClickListener onListItemClickListener;
public interface OnListItemClickListener {
public void onListItemClick(int position, View v);
}
public void setOnListItemClickListener(OnListItemClickListener onListItemClickListener) {
this.onListItemClickListener = onListItemClickListener;
}
// You implement OnClickListener in your list item view holder.
public static class ListItemViewHolder extends RecyclerView.ViewHolder implements View.OnClickListener {
public ListItemViewHolder(View listItemView) {
super(listItemView);
listItemView.setOnClickListener(this);
}
@Override
public void onClick(View view) {
onListItemClickListener.onListItemClick(getAdapterPosition(), view);
}
}
}
然后在你的主要活动或片段中你会做这样的事情。
recyclerView.setLayoutManager(new LinearLayoutManager(getActivity()));
CustomRecyclerViewAdapter customRecyclerViewAdapter = new CustomRecyclerViewAdapter(listItems);
recyclerView.setAdapter(customRecyclerViewAdapter);
customRecyclerViewAdapter.setOnListItemClickListener(new CustomRecyclerViewAdapter.OnListItemClickListener() {
@Override
public void onListItemClick(int position, View v) {
Toast.makeText(getActivity(), "TEST" , Toast.LENGTH_SHORT).show();
}
});