Java 如何在单击我的RecyclerView列表中的项目时显示onClick消息?

Java 如何在单击我的RecyclerView列表中的项目时显示onClick消息?,java,android,xml,Java,Android,Xml,我实际上在一个小组项目中工作,我想为我们的应用程序开发一个功能。我的目标是有一个包含多个项目及其图像的列表,当我单击该列表中的一个项目时,我希望在屏幕中间有一个与该特定项目相关的文本弹出窗口。我担心我可能使用了错误的技术工具。实际上,我使用一个csv文件来显示列表详细信息,使用一个适配器和一个viewHolder来显示列表。因为我不知道什么是错误的,我不知道该怎么做,所以我链接了我的大部分代码,这样你就可以检查我到现在为止是怎么做的。如果您需要查看我的xml文件,我还可以给您我的xml文件。在此

我实际上在一个小组项目中工作,我想为我们的应用程序开发一个功能。我的目标是有一个包含多个项目及其图像的列表,当我单击该列表中的一个项目时,我希望在屏幕中间有一个与该特定项目相关的文本弹出窗口。我担心我可能使用了错误的技术工具。实际上,我使用一个csv文件来显示列表详细信息,使用一个适配器和一个viewHolder来显示列表。因为我不知道什么是错误的,我不知道该怎么做,所以我链接了我的大部分代码,这样你就可以检查我到现在为止是怎么做的。如果您需要查看我的xml文件,我还可以给您我的xml文件。在此之前,我非常感谢您为我的问题提供的所有答案和花费的时间

我已经设法让我的项目列表中包含每个列表项目的标题和图片(csv文件中的文本),但我仍然无法确定如何为每个视图持有者显示特定的文本

这是我的适配器

公共类适配器扩展了RecyclerView.Adapter{
名单;
活动;
公共适配器(列表、活动){
this.list=列表;
这个。活动=活动;
}
@凌驾
公共ViewHolder onCreateViewHolder(ViewGroup ViewGroup,int itemType){
View-View=LayoutFlater.from(viewGroup.getContext()).inflate(R.layout.department,viewGroup,false);
返回新的ViewHolder(视图);
}
@凌驾
公共无效onBindViewHolder(ViewHolder ViewHolder,int位置){
部门=列表。获取(位置);
viewHolder.bind(部门、活动);
}
@凌驾
public int getItemCount(){
返回list.size();
}
}
我的取景器

public类ViewHolder扩展了RecyclerView.ViewHolder{
私有文本视图文本视图;
私人影像视图;
公共视图持有者(视图项视图){
超级(项目视图);
textViewView=(TextView)itemView.findViewById(R.id.text);
imageView=(imageView)itemView.findViewById(R.id.image);
}
公共无效绑定(部门、活动){
textViewView.setText(department.getText());
字符串uri=department.getImageUrl();
int-imageResource=activity.getResources().getIdentifier(uri,null,activity.getPackageName());
Drawable res=activity.getResources().getDrawable(imageResource);
imageView.setImageDrawable(res);
}
}
列表中的每一项都是一个部门

公共课部{
私有字符串文本;
私有字符串imageUrl;
公共部门(字符串文本、字符串图像URL){
this.text=文本;
this.imageUrl=imageUrl;
}
公共字符串getText(){
返回文本;
}
公共字符串getImageUrl(){
返回imageUrl;
}
公共void setText(字符串文本){
this.text=文本;
}
public void setImageUrl(字符串imageUrl){
this.imageUrl=imageUrl;
}
}
最后是我的碎片

公共类片段Esproches扩展片段{
公共最终静态字符分隔符=',';
私人回收站;
private List departmentslist=new ArrayList();
@凌驾
CreateView上的公共视图(布局、充气机、视图组容器、捆绑包保存状态){
super.onCreate(savedInstanceState);
视图=充气机。充气(R.layout.fragment\u species\u proches,container,false);
ajouterdepartments();
recyclerView=(recyclerView)view.findViewById(R.id.recyclerView);
setLayoutManager(新的GridLayoutManager(this,2));
setAdapter(新适配器(DepartmentsList,getActivity());
返回视图;
}
私有无效AjourderDepartments(){
ArrayList行=新的ArrayList();
ArrayList数据=新的ArrayList();
字符串sep=新字符(分隔符).toString();
lines=UtilitaireResultat.readFile(getActivity().getResources().openRawResource(R.raw.department));
用于(字符串行:行){
字符串[]oneData=line.split(sep);
data.add(oneData);
}

对于(inti=0;i您可以像这样实现ItemClick侦听器

   public class ViewHolder extends RecyclerView.ViewHolder implements View.OnClickListener {
        public TextView tvName;
        public TextView tvHometown;
        private Context context;

        public ViewHolder(Context context, View itemView) {
            super(itemView);
            this.tvName = (TextView) itemView.findViewById(R.id.tvName);
            this.tvHometown = (TextView) itemView.findViewById(R.id.tvHometown);
            // Store the context
            this.context = context;
            // Attach a click listener to the entire row view
            itemView.setOnClickListener(this);
        }

        // Handles the row being being clicked
        @Override
        public void onClick(View view) {
            int position = getAdapterPosition(); // gets item position
            // if (position != RecyclerView.NO_POSITION) { // Check if an item was deleted, but the user clicked it before the UI removed it
                User user = users.get(position);
                // We can access the data within the views
                Toast.makeText(context, tvName.getText(), Toast.LENGTH_SHORT).show();
           // }
        }
    }

使用
onBindViewHolder
处理列表项上的任何交互

@Override
    public void onBindViewHolder(ViewHolder viewHolder, int position) {
        Departement departement = list.get(position);
        viewHolder.bind(departement, activity);
        viewHolder.itemView.setOnClickListener(//your action//);
    }
ItemView
是整个项目;您可以在
bind
方法中使用
textview
imageview

您可以使用
bind
方法应用侦听器。

单击ViewHolder构造函数中的项即可处理 像


将onClickListner接口创建为

interface RecylerViewItemClickListner 
{
    void onItemClick(Department item)
}
在适配器类中设置listner

private final RecylerViewItemClickListner mOnClickListener;
public Adapter(List<Departement> list, Activity activity) {
        this.list = list;
        this.activity = activity;
        this.mOnClickListener = activity;
    }
并按如下所示更改BindViewHolder

 @Override
 public void onBindViewHolder(ViewHolder holder, int position) {
            holder.bind(items.get(position), mOnClickListener);
        }
覆盖活动中的MClick(部门项目)

@override
onItemClick(Department item)
{
  //show toast here...
}

在ViewHolder类中实现OnClickListener

public void bind(final Departement item, final mOnClickListener listener) {

            itemView.setOnClickListener(new View.OnClickListener() {
                @Override public void onClick(View v) {
                    mOnClickListener.onItemClick(item);
                }
            });
        }
  public class ViewHolder extends RecyclerView.ViewHolder implements
    View.OnClickListener
    {
                @Override
                public void onClick(View v)
                {
                   //do action
                }
    }

在ViewHolder类中实现以下方法

itemView.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View view) {
                    final User currentItem = users.get(getAdapterPosition());
                    Toast.makeText(mContext,currentItem.getText()+" is selected!",Toast.LENGTH_SHORT).show();

                }
            });

在ViewHolder中实现onclick
itemView.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View view) {
                    final User currentItem = users.get(getAdapterPosition());
                    Toast.makeText(mContext,currentItem.getText()+" is selected!",Toast.LENGTH_SHORT).show();

                }
            });