我有一个带有图像和文本的卧式回收视图,当我单击任何项目时,我希望将其显示为标记。我不想选择多个项目。一次只有一项!这是我想要实现的示例
目前,我正在水平recyclerView中显示图像
public class FilterPageHorizontalRecyclerViewAdapter extends RecyclerView.Adapter<FilterPageHorizontalRecyclerViewAdapter.ViewHolder>
{
private int selectedPosition = -1;
private static final String TAG = "RecyclerViewAdapter";
//vars
private ArrayList<String> mNames = new ArrayList<>();
private ArrayList<Integer> mImageUrls = new ArrayList<>();
private Context mContext;
public FilterPageHorizontalRecyclerViewAdapter(Context context, ArrayList<String> names, ArrayList<Integer> imageUrls) {
mNames = names;
mImageUrls = imageUrls;
mContext = context;
}
@Override
public ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.horizontal_recycler_layout, parent, false);
return new ViewHolder(view);
}
@Override
public void onBindViewHolder(final ViewHolder holder, final int position) {
Log.d(TAG, "onBindViewHolder: called.");
Glide.with(mContext)
.asBitmap()
.load(mImageUrls.get(position))
.into(holder.image);
holder.name.setText(mNames.get(position));
holder.image.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
selectedPosition = position;
Log.d(TAG, "onClick: clicked on an image: " + mNames.get(position));
Toast.makeText(mContext, mNames.get(position), Toast.LENGTH_SHORT).show();
holder.image.setImageResource(R.drawable.ic_bed);
notifyDataSetChanged();
}
});
}
@Override
public int getItemCount() {
return mImageUrls.size();
}
public class ViewHolder extends RecyclerView.ViewHolder{
CircleImageView image;
TextView name;
public ViewHolder(View itemView) {
super(itemView);
image = itemView.findViewById(R.id.image_view);
name = itemView.findViewById(R.id.name);
}
}
}
public class HorizontalRecyclerView extends AppCompatActivity {
private ArrayList<String> mNames = new ArrayList<>();
private ArrayList<Integer> mImageUrls = new ArrayList<Integer>();
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_horizontal_recycler_view);
getImages();
}
private void getImages(){
mImageUrls.add(R.drawable.home);
mNames.add("Havasu Falls");
mImageUrls.add(R.drawable.home);
mNames.add("Trondheim");
mImageUrls.add(R.drawable.home);
mNames.add("Portugal");
mImageUrls.add(R.drawable.home);
mNames.add("Rocky Mountain National Park");
mImageUrls.add(R.drawable.home);
mNames.add("Mahahual");
mImageUrls.add(R.drawable.home);
mNames.add("Frozen Lake");
mImageUrls.add(R.drawable.home);
mNames.add("White Sands Desert");
mImageUrls.add(R.drawable.home);
mNames.add("Austrailia");
mImageUrls.add(R.drawable.home);
mNames.add("Washington");
initRecyclerView();
}
private void initRecyclerView(){
LinearLayoutManager layoutManager = new LinearLayoutManager(this, LinearLayoutManager.HORIZONTAL, false);
RecyclerView recyclerView = findViewById(R.id.recyclerView);
recyclerView.setLayoutManager(layoutManager);
FilterPageHorizontalRecyclerViewAdapter adapter = new FilterPageHorizontalRecyclerViewAdapter(this, mNames, mImageUrls);
recyclerView.setAdapter(adapter);
}`enter code here`
}
请参见“属性类型”部分中的示例图片
答案 0 :(得分:0)
更改您的R.layout.horizontal_recycler_layout
,使其与您要实现的目标类似。确保对勾标记的可见性为GONE
。
完成此操作后,将您的ViewHolder
更改为此。
public class ViewHolder extends RecyclerView.ViewHolder{ View main; CircleImageView image; TextView name; public ViewHolder(View itemView) { super(itemView); main = itemView; image = itemView.findViewById(R.id.image_view); name = itemView.findViewById(R.id.name); } }
现在,您已将基本视图保存在一个变量中,以便可以设置OnClickListener
来完成ViewHolder
内部的布局
onBindViewHolder
内,将onClickListener
设置为ViewHolder
中的主行。这样,holder.main.setOnClickListener(new View.OnClickListener... onClick(View view){ iconOfCheckMark.setVisibility(View.Visible); holder.main.setBackgroundTintList(contextInstance.getResources().getColorStateList(R.color.your_xml_name)); } );
这将更改整个视图的色调(将其变为蓝色),您可以看到this,了解如何正确设置色调。
要使其一次仅选择一项,您可以查看以下站点: