如何根据用户在Android Studio(Java)中输入的条件显示可绘制对象

Posted

技术标签:

【中文标题】如何根据用户在Android Studio(Java)中输入的条件显示可绘制对象【英文标题】:How to display a drawable according to a condition entered by the user in Android studio(Java) 【发布时间】:2021-11-16 18:28:39 【问题描述】:

我在 Recycler 视图中显示了一个项目列表,它们根据用户输入的优先级 (1,2,3) 进行排序,其中 1 位于顶部,3 位于底部。根据用户的输入,我希望这些项目附有红色(优先级 1)、黄色(优先级 2)和绿色(优先级 3)的可绘制对象。我可以 请知道如何在这种情况下显示可绘制对象。 picture 1

Picture 2

【问题讨论】:

请提供您尝试过的代码段。 我已经接受了之前提供的答案。感谢您的宝贵时间! 【参考方案1】:

您可以在适配器的onBindViewHolder 方法中执行此操作,或者在您的视图持有者中创建一个bind 方法,然后从onBindViewHolder 调用它

对于后者,在您的视图持有者中创建绑定方法

在 Kotlin 中

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

【讨论】:

嘿,非常感谢你的回答,但你能用Java解释一下吗,因为我对Kotlin很陌生,用Java更容易理解。谢谢。 @Harshitha 我已经更新了我的答案 请问一个疑问,你在bind方法(Task任务)中取的参数是什么。它是 List 或模型类还是其他什么? 再次,抱歉有疑问,但我也知道priorityIndi​​cator.setImageDrawable()中的mImageView是什么; 其实是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)
        
    
 

【讨论】:

以上是关于如何根据用户在Android Studio(Java)中输入的条件显示可绘制对象的主要内容,如果未能解决你的问题,请参考以下文章

Android如何使用so文件和Android studio中导入so

如何在一个 android studio 项目中为两种不同类型的用户提供两种不同的导航抽屉活动?

如何在intellij IDEA中导入ECLIPSE的android项目

如何根据 android studio 中的微调器选择更改 imageview 视图?

Android studio环境变量配置及其作用(JDK与SDK配置)

接受许可时出错 - Android Studio