Android 单击imagebutton时获取recyclerview项目的位置
以下是我用来获取recyclerview项目的位置并执行准确操作的方法:Android 单击imagebutton时获取recyclerview项目的位置,android,android-recyclerview,android-imagebutton,Android,Android Recyclerview,Android Imagebutton,以下是我用来获取recyclerview项目的位置并执行准确操作的方法: @Override public void onItemClicked(RecyclerView recyclerView, int position, View v) { } 我将imagebutton放入文件中,该文件会使我的recyclerview膨胀,如图所示: “我的图像”按钮位于播放视频的活动中,如图所示。 [![图片] 这是我的适配器: public class Adapter extends Recy
@Override
public void onItemClicked(RecyclerView recyclerView, int position, View v) {
}
我将imagebutton放入文件中,该文件会使我的recyclerview膨胀,如图所示:
“我的图像”按钮位于播放视频的活动中,如图所示。
[![图片]
这是我的适配器:
public class Adapter extends RecyclerView.Adapter<RecyclerView.ViewHolder> {
private Context context;
private LayoutInflater inflater;
private List<Data> data= Collections.emptyList();
Data current;
private int currentPos=0;
// create constructor to innitilize context and data sent from MainActivity
public Adapter(Context context, List<Data> data){
this.context=context;
inflater= LayoutInflater.from(context);
this.data=data;
}
// Inflate the layout when viewholder created
@Override
public RecyclerView.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
View view=inflater.inflate(R.layout.container, parent,false);
MyHolder holder=new MyHolder(view);
return holder;
}
// Bind data
@Override
public void onBindViewHolder(RecyclerView.ViewHolder holder, int position) {
// Obtenir la position actuelle de l'élément dans recyclerview pour lier les données et affecter des valeurs à partir de la liste
MyHolder myHolder= (MyHolder) holder;
Data current = data.get(position);
myHolder.textFishName.setText(current.catName);
myHolder.textSize.setText(current.sizeName);
myHolder.textSize.setVisibility(View.GONE);
myHolder.textType.setText(current.fishName);
myHolder.id.setText(""+current.idServer+"");
myHolder.textPrice.setText("" + current.price + "");
myHolder.textPrice.setVisibility(View.GONE);
myHolder.textPrice.setTextColor(ContextCompat.getColor(context, R.color.colorAccent));
// load image into imageview using glide
Glide.with(context).load("http://192.168.43.196/vibe2/images/" + current.fishImage)
.placeholder(R.drawable.ic_menu_camera)
.error(R.drawable.ic_menu_camera)
.into(myHolder.ivFish);
}
// return total item from List
@Override
public int getItemCount() {
return data.size();
}
class MyHolder extends RecyclerView.ViewHolder {
TextView textFishName;
ImageView ivFish;
TextView textSize;
TextView textType;
TextView textPrice;
TextView counter;
TextView id;
// create constructor to get widget reference
public MyHolder(View itemView) {
super(itemView);
textFishName = itemView.findViewById(R.id.textFishName);
ivFish = itemView.findViewById(R.id.ivFish);
textSize = itemView.findViewById(R.id.textSize);
textType = itemView.findViewById(R.id.textType);
textPrice = itemView.findViewById(R.id.textPrice);
counter = itemView.findViewById(R.id.counter);
id = itemView.findViewById(R.id.id);
}
}
公共类适配器扩展了RecyclerView.Adapter{
私人语境;
私人充气机;
私有列表数据=Collections.emptyList();
数据流;
私有int currentPos=0;
//创建构造函数以使用从MainActivity发送的上下文和数据
公共适配器(上下文、列表数据){
this.context=context;
充气器=充气器。从(上下文);
这个。数据=数据;
}
//创建viewholder时展开布局
@凌驾
public RecyclerView.ViewHolder onCreateViewHolder(视图组父级,int-viewType){
视图=充气机。充气(R.layout.container,父级,false);
MyHolder=新的MyHolder(视图);
报税表持有人;
}
//绑定数据
@凌驾
BindViewHolder上的公共无效(RecyclerView.ViewHolder,int位置){
//在回收利用过程中,对产品和产品的影响进行评估
我的持有人我的持有人=(我的持有人)持有人;
数据当前=数据获取(位置);
myHolder.textFishName.setText(current.catName);
myHolder.textSize.setText(current.sizeName);
myHolder.textSize.setVisibility(View.GONE);
myHolder.textType.setText(current.fishName);
myHolder.id.setText(“+current.idServer+”);
myHolder.textPrice.setText(“+current.price+”);
myHolder.textPrice.setVisibility(View.GONE);
myHolder.textPrice.setTextColor(ContextCompat.getColor(context,R.color.colorAccent));
//使用glide将图像加载到imageview中
Glide.with(context.load)(“http://192.168.43.196/vibe2/images/“+当前.fishImage)
.占位符(R.drawable.ic\U菜单\U摄像头)
.错误(R.drawable.ic\U菜单\U摄像头)
.into(myHolder.ivFish);
}
//从列表中返回总项
@凌驾
public int getItemCount(){
返回data.size();
}
类MyHolder扩展了RecyclerView.ViewHolder{
TextView textFishName;
图像视图ivFish;
文本视图文本大小;
文本视图文本类型;
text查看text价格;
文本视图计数器;
文本视图id;
//创建构造函数以获取小部件引用
公共MyHolder(查看项目视图){
超级(项目视图);
textFishName=itemView.findviewbyd(R.id.textFishName);
ivFish=itemView.findviewbyd(R.id.ivFish);
textSize=itemView.findviewbyd(R.id.textSize);
textType=itemView.findViewById(R.id.textType);
textPrice=itemView.findviewbyd(R.id.textPrice);
计数器=itemView.findViewById(R.id.counter);
id=itemView.findviewbyd(R.id.id);
}
}
}这可以通过使用从activity到RecyclerView的ViewHolder的界面进行存档。在ViewHolder中,您可以实现onClickListener,在其中,您可以从ViewHolder传递点击偶数和所需信息
public class Adapter extends RecyclerView.Adapter<MyHolder> {
private Context context;
private LayoutInflater inflater;
private List<Data> data= Collections.emptyList();
Data current;
private int currentPos=0;
// Custom listener to relay to selected data from ViewHolder to Activity
private AdapterListener adapterListener;
// create constructor to innitilize context and data sent from MainActivity
public Adapter(Context context, List<Data> data, AdapterListener adapterListener){
this.context=context;
inflater= LayoutInflater.from(context);
this.data=data;
this.adapterListener = adapterListener;
}
// Inflate the layout when viewholder created
@Override
public MyHolder onCreateViewHolder(ViewGroup parent, int viewType) {
View view=inflater.inflate(R.layout.container, parent,false);
MyHolder holder=new MyHolder(view, adapterListener);
return holder;
}
// Bind data
@Override
public void onBindViewHolder(MyHolder holder, int position) {
// Obtenir la position actuelle de l'élément dans recyclerview pour lier les données et affecter des valeurs à partir de la liste
MyHolder myHolder= (MyHolder) holder;
myHolder.setData(data.get(position));
}
// return total item from List
@Override
public int getItemCount() {
return data.size();
}
}
public class MyHolder extends RecyclerView.ViewHolder implements View.OnClickListener {
TextView textFishName;
ImageView ivFish;
TextView textSize;
TextView textType;
TextView textPrice;
TextView counter;
TextView id;
Data data;
// Adapter listener
private AdapterListener adapterListener;
// create constructor to get widget reference
public MyHolder(View itemView, AdapterListener adapterListener) {
super(itemView);
textFishName = itemView.findViewById(R.id.textFishName);
ivFish = itemView.findViewById(R.id.ivFish);
textSize = itemView.findViewById(R.id.textSize);
textType = itemView.findViewById(R.id.textType);
textPrice = itemView.findViewById(R.id.textPrice);
counter = itemView.findViewById(R.id.counter);
id = itemView.findViewById(R.id.id);
this.adapterListener = adapterListener;
}
public void setData(Data data){
this.data = data;
textFishName.setText(current.catName);
textSize.setText(current.sizeName);
textSize.setVisibility(View.GONE);
textType.setText(current.fishName);
id.setText(""+current.idServer+"");
textPrice.setText("" + current.price + "");
textPrice.setVisibility(View.GONE);
textPrice.setTextColor(ContextCompat.getColor(context, R.color.colorAccent));
// load image into imageview using glide
Glide.with(context).load("http://192.168.43.196/vibe2/images/" + current.fishImage)
.placeholder(R.drawable.ic_menu_camera)
.error(R.drawable.ic_menu_camera)
.into(ivFish);
}
@Override
public void onClick(View v) {
switch (v.getId()){
case R.id.ivFish:
adapterListener.onClickImageView(getAdapterPosition(), data);
break;
}
}
}
public interface AdapterListener {
void onClickImageView(int position, Data data);
}
公共类适配器扩展了RecyclerView.Adapter{
私人语境;
私人充气机;
私有列表数据=Collections.emptyList();
数据流;
私有int currentPos=0;
//自定义侦听器将选定数据从ViewHolder中继到“活动”
专用适配器列表器适配器列表器;
//创建构造函数以使用从MainActivity发送的上下文和数据
公共适配器(上下文上下文、列表数据、AdapterListener AdapterListener){
this.context=context;
充气器=充气器。从(上下文);
这个。数据=数据;
this.adapterListener=adapterListener;
}
//创建viewholder时展开布局
@凌驾
public MyHolder onCreateViewHolder(视图组父级,int-viewType){
视图=充气机。充气(R.layout.container,父级,false);
MyHolder=新的MyHolder(视图、适配器列表);
报税表持有人;
}
//绑定数据
@凌驾
公共无效onBindViewHolder(MyHolder,int位置){
//在回收利用过程中,对产品和产品的影响进行评估
我的持有人我的持有人=(我的持有人)持有人;
myHolder.setData(data.get(position));
}
//从列表中返回总项
@凌驾
public int getItemCount(){
返回data.size();
}
}
公共类MyHolder扩展了RecyclerView.ViewHolder实现了View.OnClickListener{
TextView textFishName;
图像视图ivFish;
文本视图文本大小;
文本视图文本类型;
text查看text价格;
文本视图计数器;
文本视图id;
数据;
//适配器侦听器
专用适配器列表器适配器列表器;
//创建构造函数以获取小部件引用
公共MyHolder(查看项目视图、适配器列表器适配器列表器){
超级(项目视图);
textFishName=itemView.findviewbyd(R.id.textFishName);
ivFish=itemView.findviewbyd(R.id.ivFish);
textSize=itemView.findviewbyd(R.id.textSize);
textType=itemView.findViewById(R.id.textType);
textPrice=itemView.findviewbyd(R.id.textPrice);
计数器=itemView.findViewById(R.id.counter);
id=itemView.findviewbyd(R.id.id);
this.adapterListener=adapterListener;
}
公共无效设置数据(数据){
这个数据=数据;
textFishName.setText(current.catName);
textSize.setText(当前的.sizeName);
textSize.setVisibility(View.GONE);
textType.setText(current.fishName);
id.setText(“+current.idServer+”);
textPrice.setText(“+current.price+”);
textPrice.setVisibility(View.GONE);
setTextColor(ContextCompat.getColor(context,R.color.colorAccent));
//将图像加载到i
OnItemClick onItemClick;
public void setOnItemClick(OnItemClick onItemClick) {
this.onItemClick = onItemClick;
}
public interface OnItemClick {
void getPosition(int pos); //pass any things
}
@Override
public void onBindViewHolder(ItemViewHolder holder, final int position) {
// below code handle click event on recycler view item.
String data = mStringList.get(position);
holder.textView.setText(data);
holder.itemView.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
onItemClick.getPosition(position);
}
});
}
adpater.setOnItemClick(new RecyclerViewAdpater.OnItemClick() {
@Override
public void getPosition(int pos) {
Toast.makeText(getApplicationContext(),"Click Item Postion::"+pos,Toast.LENGTH_SHORT).show();
}
});
...
// create constructor to get widget reference
public MyHolder(View itemView) {
super(itemView);
...
ivFish = itemView.findViewById(R.id.ivFish);
...
ivFish.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
if(getAdapterPosition() != -1) { // Avoid Exception
// use getAdapterPosition() to get the current position
}
}
});
}