Abh*_*oni 14 android android-recyclerview
RecyclerView与ListView不同,因为它不提供onItemCLickListener类来处理单击事件.
如果通过在ViewHolder中定义onClickListener,单击项目后幕后不会发生很多事情,则可以解决此问题.
如果文本或其他任何必须传递给下一个Activity的内容在ViewHolder有权访问的视图中确实存在,但它是具有RecyclerView的Activity的一部分呢?
在这种情况下,必须在活动内部实现onClickListener,以便可以转发文本.有可能的.
一种方法是添加一个隐藏视图的Invisible View,然后执行之前已经完成的操作; 在适配器中实现onClickListener.
不知何故,将该文本传递给适配器.
怎么能"2" 实施?
pRa*_*NaY 22
请参阅下面的示例来创建RecyclerView OnClick.
示例代码:
public class ContentAdapter extends RecyclerView.Adapter<ContentAdapter.ViewHolder> {
public interface OnItemClickListener {
void onItemClick(ContentItem item);
}
private final List<ContentItem> items;
private final OnItemClickListener listener;
public ContentAdapter(List<ContentItem> items, OnItemClickListener listener) {
this.items = items;
this.listener = listener;
}
@Override public ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
View v = LayoutInflater.from(parent.getContext()).inflate(R.layout.view_item, parent, false);
return new ViewHolder(v);
}
@Override public void onBindViewHolder(ViewHolder holder, int position) {
holder.bind(items.get(position), listener);
}
@Override public int getItemCount() {
return items.size();
}
static class ViewHolder extends RecyclerView.ViewHolder {
private TextView name;
private ImageView image;
public ViewHolder(View itemView) {
super(itemView);
name = (TextView) itemView.findViewById(R.id.name);
image = (ImageView) itemView.findViewById(R.id.image);
}
public void bind(final ContentItem item, final OnItemClickListener listener) {
name.setText(item.name);
Picasso.with(itemView.getContext()).load(item.imageUrl).into(image);
itemView.setOnClickListener(new View.OnClickListener() {
@Override public void onClick(View v) {
listener.onItemClick(item);
}
});
}
}
}
Run Code Online (Sandbox Code Playgroud)
并使用RecyclerView以下代码使用适配器:
recycler.setAdapter(new ContentAdapter(items, new ContentAdapter.OnItemClickListener() {
@Override public void onItemClick(ContentItem item) {
Toast.makeText(getContext(), "Item Clicked", Toast.LENGTH_LONG).show();
}
}));
Run Code Online (Sandbox Code Playgroud)
希望它能帮助你.
Adn*_*jad 15
在您的活动中写一个公共函数,例如:
public void onClickCalled(String anyValue) {
// Call another acitivty here and pass some arguments to it.
}
Run Code Online (Sandbox Code Playgroud)
现在在适配器的onClick函数中
@Override
public void onClick(View view) {
((YouActivityClass) context).onClickCalled("your argument here");
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
37740 次 |
| 最近记录: |