#android #sorting #android-recyclerview #android-drawable
Вопрос:
У меня есть список элементов, отображаемых в представлении переработчика, и они отсортированы в соответствии с их приоритетом (1,2,3), введенным пользователем, с 1 сверху и 3 снизу. Я хочу, чтобы элементы сопровождались рисованием красным цветом(для приоритета 1), желтым(для приоритета 2) и зеленым(для приоритета 3) в зависимости от ввода пользователя. Могу ли я, пожалуйста, знать, как отобразить рисоваемое в таком случае. рисунок 1
Комментарии:
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)
}
}
}