Android studio(Java) 如何根据用户输入的条件显示drawable

How to display a drawable according to a condition entered by the user in Android studio(Java)

我在 Recycler 视图中显示了一个项目列表,它们根据用户输入的优先级 (1,2,3) 排序,1 在上,3 在下。我希望这些项目伴随着红色(优先级 1)、黄色(优先级 2)和绿色(优先级 3)的可绘制对象,具体取决于用户的输入。我可以 请知道在这种情况下如何显示可绘制对象。 picture 1

Picture 2

所以布局的颜色总是一样的吧?第一个索引为红色,第二个为黄色,第三个为绿色?

在您的 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)
        }
    }
 }

您可以在适配器的 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)
}

在Java

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));
}