如何根据用户在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 或模型类还是其他什么? 再次,抱歉有疑问,但我也知道priorityIndicator.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 视图?