【发布时间】:2016-12-06 00:06:41
【问题描述】:
在我的 RecyclerView 的适配器文件中,我在 onCreateViewHolder 方法中设置了一个 OnClickListener。它工作正常,即在单击 RecyclerView 列表中的项目时启动新活动。我正在尝试为将运行不同方法的项目的 LongClick 添加 OnLongClickListener。
当我添加如下所示的 setOnLongClickListener 部分和 onLongClick 方法时,RecyclerView 列表中的项目无法正确显示,因此视图中的某些内容一定不正确。我在这里错过了什么?
适配器文件:
public class ContactListAdapter extends RecyclerView.Adapter<ContactListAdapter.ContactHolder>{
private RecyclerItemClickListener recyclerItemClickListener;
...
@Override
public ContactHolder onCreateViewHolder(ViewGroup parent, int viewType) {
View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.list_contact_item, parent, false);
final ContactHolder contactHolder = new ContactHolder(view);
contactHolder.itemView.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
int adapterPos = contactHolder.getAdapterPosition();
if (adapterPos != RecyclerView.NO_POSITION) {
if (recyclerItemClickListener != null) {
recyclerItemClickListener.onItemClick(adapterPos, contactHolder.itemView);
}
}
}
});
contactHolder.itemView.setOnLongClickListener(new View.OnLongClickListener() {
@Override
public boolean onLongClick(View view) {
int adapterPos = contactHolder.getAdapterPosition();
if (adapterPos != RecyclerView.NO_POSITION) {
if (recyclerItemClickListener != null) {
recyclerItemClickListener.onItemLongClick(adapterPos, contactHolder.itemView);
}
}
return false;
}
});
return contactHolder;
}
public void setOnItemClickListener(RecyclerItemClickListener recyclerItemClickListener) {
this.recyclerItemClickListener = recyclerItemClickListener;
}
监听文件:
public interface RecyclerItemClickListener {
void onItemClick(int position, View view);
void onItemLongClick(int position, View v);
}
活动文件:
...
@Override
public void onItemClick(int position, View view) {
ActActivity.start(this, contactListAdapter.getItem(position));
}
@Override
public void onItemLongClick(int position, View v) {
Toast toast = Toast.makeText(this, "Test", Toast.LENGTH_LONG);
toast.setGravity(Gravity.CENTER_VERTICAL, 0, 0);
toast.show();
}
【问题讨论】:
-
你有没有在你的 recyclerview 上实现过 onItemTouchListener?如果有,请将其删除并重试。
-
不,我没有使用任何 onItemTouchListener 代码。
标签: android onclick android-recyclerview