Как отобразить чертеж в соответствии с условием, введенным пользователем в Android studio(Java)

#android #sorting #android-recyclerview #android-drawable

Вопрос:

У меня есть список элементов, отображаемых в представлении переработчика, и они отсортированы в соответствии с их приоритетом (1,2,3), введенным пользователем, с 1 сверху и 3 снизу. Я хочу, чтобы элементы сопровождались рисованием красным цветом(для приоритета 1), желтым(для приоритета 2) и зеленым(для приоритета 3) в зависимости от ввода пользователя. Могу ли я, пожалуйста, знать, как отобразить рисоваемое в таком случае. рисунок 1

Рисунок 2

Комментарии:

1. Пожалуйста, предоставьте фрагмент кода того, что вы пробовали.

2. Я принял ответ, предоставленный ранее. Спасибо, что уделили мне время!

Ответ №1:

Вы можете сделать это в onBindViewHolder методе адаптера или создать bind метод в держателе представления, а затем вызвать его из onBindViewHolder

Для последнего, в вашем представлении, создайте метод привязки

В Котлине

 class TaskViewHolder(private val taskItemBinding: TaskItemBinding) :
            RecyclerView.ViewHolder(taskItemBinding.root) {
            fun bind(task: Task) {
                taskItemBinding.apply {
                    priorityIndicator.setImageDrawable(
                        ContextCompat.getDrawable(
                            priorityIndicator.context,
                            when (task.priority) {
                                1 -> R.drawable.indicator_red
                                2 -> R.drawable.indicator_yellow
                                3 -> R.drawable.indicator_green
                            }
                        )
                    )
                }
            }
        }
 

А теперь позвоните ему из onBindViewHolder

 override fun onBindViewHolder(holder: TaskViewHolder, position: Int) {
    val task = getItem(position)
    holder.bind(task)
}
 

На Яве

 public class TaskViewHolder extends RecyclerView.ViewHolder {
        ImageView priorityIndicator;

        public TaskViewHolder(@NonNull View itemView) {
            super(itemView);
            priorityIndicator = itemView.findViewById(R.id.priorityIndicator);
        }


        private void bind(Task task) {
            int drawableId;
            switch (task.priority) {
                case 1: drawableId = R.drawable.indicator_red;
                    break;
                case 2: drawableId = R.drawable.indicator_yellow;
                    break;
                default: drawableId = R.drawable.indicator_green;
            }
            priorityIndicator.setImageDrawable(
                    ContextCompat.getDrawable(priorityIndicator.getContext(), drawableId)
            );
        }
    }
 

Теперь позвоните ему из onBindViewHolder

 @Override
public void onBindViewHolder(@NonNull TaskViewHolder holder, int position) {
    holder.bind(taskList.get(position));
}
 

Комментарии:

1. Эй, большое вам спасибо за ответ, но не могли бы вы, пожалуйста, объяснить то же самое на Java, потому что я очень новичок в Котлине, и это было бы легче понять на Java. Спасибо.

2. @Harshitha Я обновил свой ответ

3. Могу ли я задать вопрос, каковы параметры, которые вы приняли в методе привязки (задача задачи). Это список или класс модели или что-то еще?

4. Опять же, извините за сомнения, но могу ли я также узнать, что такое mImageView в priorityIndicator.setImageDrawable();

5. На самом деле, это как- priorityIndicator то по ошибке я его напечатал mImageView , Спасибо, что указали на это. Я обновил свой ответ.

Ответ №2:

Значит, цвет макета всегда один и тот же, верно? Красный для 1-го индекса, желтый для 2-го и зеленый для 3-го?

На вашем адаптере RecyclerView вы можете передать параметр позиции onBindViewHolder и добавить условие на основе позиции. Например:

 override fun onBindViewHolder(holder: listHolder, position: Int) {
    holder.bind(listItem[position], position)
}

class ListHolder(itemView: View): RecyclerView.ViewHolder(itemView) {
    fun bind(item: YourItem, position) {
        when(position){
            0 -> binding.imageView.setImageResource(R.drawable.redDrawable)
            1 -> binding.imageView.setImageResource(R.drawable.yellowDrawable)
            2 -> binding.imageView.setImageResource(R.drawable.greenDrawable)
        }
    }
 }