[英]View object not clickable - using OnClickListener
I created a basic Class called ListItem, which just stores two Strings and an integer. 我创建了一个名为ListItem的基本类,该类仅存储两个String和一个整数。
This is my container for items that sit in a RecyclerView. 这是我存放在RecyclerView中的物品的容器。
I tried to make ListItems clickable, so I made the ListItem extend the View class. 我试图使ListItems可单击,所以我使ListItem扩展了View类。 And then added an OnClickListener and set it.
然后添加一个OnClickListener并进行设置。 It hasn't worked.
它没有用。 I tested by creating a short message using TOAST but nothing displays.
我通过使用TOAST创建一条短消息进行了测试,但未显示任何内容。 Does anyone have any idea why?
有谁知道为什么吗?
ListItem class: 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;
}
...class where ListItems are created..... ...创建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);
There is a method for this in the View class. View类中有一个用于此的方法。
y.setClickable(true);
You may also need to do this for the ListView as well. 您可能还需要对ListView执行此操作。
myListView.setClickable(true); myListView.setClickable(真);
Implementing item click listener in RecyclerView is a bit different. 在RecyclerView中实现项目单击侦听器有点不同。
I assume you have implemented your own custom RecyclerViewAdpater which should be like this. 我假设您已经实现了自己的自定义RecyclerViewAdpater,应该像这样。 You have to implement your own OnClickListener interface inside it.
您必须在其中实现自己的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);
}
}
}
Then in your main activity or fragment you would do something like this. 然后,在您的主要活动或片段中,您将执行以下操作。
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();
}
});
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.