Сделайте изображение как отмеченное при нажатии в обзоре переработчика - PullRequest
0 голосов
/ 08 июня 2019

У меня есть горизонтальное окно просмотра с изображениями и текстом, когда я нажимаю на любой элемент, я хочу, чтобы он отображался как отмеченный.Я не хочу выбирать несколько предметов.Только один предмет за один раз!Вот пример, который я хочу достичь 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 голосов
/ 08 июня 2019
  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));
        }
);

Это изменит оттенок вашего полного вида (сделает его синим), и вы можете увидеть это о том, как правильно придать оттенок.

  1. Чтобы сделать так, чтобы он выбирал только один элемент за раз, вы можете проверить сайты ниже:

    Отдельный выбор в RecyclerView

...