在recyclerview中单击时,将图像标记为标记

时间:2019-06-08 09:30:02

标签: android android-recyclerview imageview

我有一个带有图像和文本的卧式回收视图,当我单击任何项​​目时,我希望将其显示为标记。我不想选择多个项目。一次只有一项!这是我想要实现的示例 image 目前,我正在水平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`
    }

img请参见“属性类型”部分中的示例图片

1 个答案:

答案 0 :(得分:0)

  1. 更改您的R.layout.horizontal_recycler_layout,使其与您要实现的目标类似。确保对勾标记的可见性为GONE

  2. 完成此操作后,将您的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内部的布局

  1. 这样做之后,在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,了解如何正确设置色调。

  1. 要使其一次仅选择一项,您可以查看以下站点:

    Single Selection in RecyclerView