Java 如何在单击我的RecyclerView列表中的项目时显示onClick消息?
我实际上在一个小组项目中工作,我想为我们的应用程序开发一个功能。我的目标是有一个包含多个项目及其图像的列表,当我单击该列表中的一个项目时,我希望在屏幕中间有一个与该特定项目相关的文本弹出窗口。我担心我可能使用了错误的技术工具。实际上,我使用一个csv文件来显示列表详细信息,使用一个适配器和一个viewHolder来显示列表。因为我不知道什么是错误的,我不知道该怎么做,所以我链接了我的大部分代码,这样你就可以检查我到现在为止是怎么做的。如果您需要查看我的xml文件,我还可以给您我的xml文件。在此之前,我非常感谢您为我的问题提供的所有答案和花费的时间 我已经设法让我的项目列表中包含每个列表项目的标题和图片(csv文件中的文本),但我仍然无法确定如何为每个视图持有者显示特定的文本 这是我的适配器Java 如何在单击我的RecyclerView列表中的项目时显示onClick消息?,java,android,xml,Java,Android,Xml,我实际上在一个小组项目中工作,我想为我们的应用程序开发一个功能。我的目标是有一个包含多个项目及其图像的列表,当我单击该列表中的一个项目时,我希望在屏幕中间有一个与该特定项目相关的文本弹出窗口。我担心我可能使用了错误的技术工具。实际上,我使用一个csv文件来显示列表详细信息,使用一个适配器和一个viewHolder来显示列表。因为我不知道什么是错误的,我不知道该怎么做,所以我链接了我的大部分代码,这样你就可以检查我到现在为止是怎么做的。如果您需要查看我的xml文件,我还可以给您我的xml文件。在此
公共类适配器扩展了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();
}
});