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