Java 在android中使用Recycler视图同时与两组多个图像进行数据绑定
我们的问题是通过使用数据绑定单击[回收器视图]的任何单个项目来更新回收器视图中的多个图像,但最初我们只能使用ImageAdapter的xml中的数据绑定来更新某些位置的图像。但根据我们在安卓开发者网站上的搜索,有人建议我们使用“回收者”视图,而不是我们最初的方法 上述方法是通过在映像适配器中使用数据绑定实现的,如下所示 图像适配器Java 在android中使用Recycler视图同时与两组多个图像进行数据绑定,java,android-recyclerview,android-databinding,Java,Android Recyclerview,Android Databinding,我们的问题是通过使用数据绑定单击[回收器视图]的任何单个项目来更新回收器视图中的多个图像,但最初我们只能使用ImageAdapter的xml中的数据绑定来更新某些位置的图像。但根据我们在安卓开发者网站上的搜索,有人建议我们使用“回收者”视图,而不是我们最初的方法 上述方法是通过在映像适配器中使用数据绑定实现的,如下所示 图像适配器 package tene.com.darxstudios; import android.content.Context; import android.data
package tene.com.darxstudios;
import android.content.Context;
import android.databinding.DataBindingUtil;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import android.widget.ImageView;
import java.util.ArrayList;
import java.util.List;
public class ImageAdapter extends BaseAdapter {
private static final String TAG = ImageAdapter.class.getName() ;
Context mContext;
List<Integer> cropsList1 = new ArrayList<Integer>();
List<Integer> cropsList2 = new ArrayList<Integer>();
User user0 = new User(),user1 = new User(),user2 = new User(),user3 = new User(),user4 = new User();
public ImageAdapter(Context mContext,List<Integer> cropsList1,List<Integer> cropsList2){
this.mContext = mContext;
this.cropsList1 = cropsList1;
this.cropsList2 = cropsList2;
}
@Override
public int getCount() {
return cropsList1.size();
}
@Override
public Object getItem(int position) {
return cropsList1.get(position);
}
@Override
public long getItemId(int position) {
return position;
}
@Override
public View getView(final int position, View convertView, ViewGroup parent) {
LayoutInflater inflater = (LayoutInflater) mContext
.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
// View view = inflater.inflate(R.layout.item_view, null);
final User user = new User();
user.setFirstName(cropsList1.get(position));
tene.com.darxstudios.ItemViewBinding binding = DataBindingUtil.inflate(inflater,R.layout.item_view, parent, false);
binding.setUser(user);
View view = binding.getRoot();
ImageView imageView = (ImageView) view.findViewById(R.id.image);
// if(position == 0){
// user0 = user;
// }else if(position == 1){
// user1 = user;
// }else if(position == 2){
// user2 = user;
// }else if(position == 3){
// user3 = user;
// }else if(position == 4){
// user4 = user;
// }
imageView.setOnClickListener(new View.OnClickListener() {
public void onClick(View v) {
user.setFirstName(cropsList2.get(position));
// user0.setFirstName(cropsList2.get(0));
// user1.setFirstName(cropsList2.get(1));
// user2.setFirstName(cropsList2.get(2));
// user3.setFirstName(cropsList2.get(3));
// user4.setFirstName(cropsList2.get(4));
}
});
return view;
}
}
package tene.com.darxstudios;
导入android.content.Context;
导入android.databinding.DataBindingUtil;
导入android.view.LayoutInflater;
导入android.view.view;
导入android.view.ViewGroup;
导入android.widget.BaseAdapter;
导入android.widget.ImageView;
导入java.util.ArrayList;
导入java.util.List;
公共类ImageAdapter扩展了BaseAdapter{
私有静态最终字符串标记=ImageAdapter.class.getName();
语境;
List cropsList1=新的ArrayList();
List cropsList2=新的ArrayList();
用户user0=new User(),user1=new User(),user2=new User(),user3=new User(),user4=new User();
公共图像适配器(上下文mContext、列表cropsList1、列表cropsList2){
this.mContext=mContext;
this.cropsList1=cropsList1;
this.cropsList2=cropsList2;
}
@凌驾
public int getCount(){
返回cropsList1.size();
}
@凌驾
公共对象getItem(int位置){
返回cropsList1.get(位置);
}
@凌驾
公共长getItemId(int位置){
返回位置;
}
@凌驾
公共视图getView(最终整数位置、视图转换视图、视图组父视图){
LayoutFlater充气器=(LayoutFlater)mContext
.getSystemService(上下文布局\充气机\服务);
//视图=充气机。充气(R.layout.item_视图,空);
最终用户=新用户();
user.setFirstName(cropsList1.get(position));
tene.com.darxstudios.ItemViewBinding binding=DataBindingUtil.inflate(充气机,R.layout.item_视图,父视图,false);
binding.setUser(用户);
View=binding.getRoot();
ImageView=(ImageView)view.findViewById(R.id.image);
//如果(位置==0){
//user0=用户;
//}else if(位置==1){
//user1=用户;
//}else if(位置==2){
//user2=用户;
//}else if(位置==3){
//user3=用户;
//}else if(位置==4){
//user4=用户;
// }
imageView.setOnClickListener(新视图.OnClickListener(){
公共void onClick(视图v){
user.setFirstName(cropsList2.get(position));
//user0.setFirstName(cropsList2.get(0));
//user1.setFirstName(cropsList2.get(1));
//user2.setFirstName(cropsList2.get(2));
//user3.setFirstName(cropsList2.get(3));
//user4.setFirstName(cropsList2.get(4));
}
});
返回视图;
}
}
item_view.xml
<?xml version="1.0" encoding="utf-8"?>
<layout xmlns:bind="http://schemas.android.com/apk/res-auto"
xmlns:android="http://schemas.android.com/apk/res/android">
<data class=".ItemViewBinding">
<variable name="user" type="tene.com.darxstudios.User"/>
</data>
<LinearLayout
android:orientation="horizontal" android:layout_width="wrap_content"
android:layout_height="match_parent">
<ImageView
android:layout_width="200dp"
android:layout_height="200dp"
android:id="@+id/image"
firstName='@{user.firstName}'/>
</LinearLayout>
</layout>
我们需要使用android中带有数据绑定的recycler view在单击任何图像时更新所有图像。将更改图像所需的逻辑放在onBindViewHolder中的onClickListener中。请参阅recyclerview教程以了解如何实现它。下面的代码将只处理onClickListener
public class NumReelAdapter extends RecyclerView.Adapter<NumReelAdapter.recyclerViewHolder> {
List<NumReel> data = Collections.emptyList();
Context ctx;
int selectedPosition = 0;
在这里,您可以检查单击图像的任何特定属性,然后进行后续更改。因此,在您的情况下,您必须检查图像的名称。因此,如果点击鹰嘴豆,背景就会变成一片稻田
public void onBindViewHolder(final recyclerViewHolder holder, final int position) {
final NumReel current = data.get(position);
if(selectedPosition == position){
// here highlighting the background. And set the inside color to green
holder.itemView.setBackground(whatever_image_id);
} else {
//reset the color to white
holder.itemView.setBackground(whatever_it_had_before);
}
holder.vItemView.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
//refresh the adapter
notifyItemChanged(selectedPosition);
//change clicked position
selectedPosition = position;
//reset the adapter with new position highlighted
notifyItemChanged(selectedPosition);
if (numClickListener != null) {
String vTag = v.getTag().toString();
//numClickListener.repsClick(v, position); alternate method where data can't be sent
numClickListener.numClick(vTag, current.num);
}
}
});