【问题标题】:Listview customization in Android different text colorsAndroid不同文本颜色中的Listview自定义
【发布时间】:2017-05-14 15:03:00
【问题描述】:

我有一个ListView,它有一个ArrayAdapter,它的信息来自 一个字符串数组。我尝试使用自定义适配器类,我必须覆盖 getView() 方法,在该方法中我还使用 ViewHolder 模式来完成我想要完成的工作。然而,这是一场噩梦,因为许多视图重复出现或根本没有显示,并且行都被打乱了。

我的ListView 及其适配器的实现现在要短得多。 但是,我想要完成的是ListView 的某些行将以红色显示文本,而另一些则以白色显示。将以红色显示的文本具有子字符串“R2”。请记住,此文本存储在适配器也有句柄的字符串数组中。好吧,这是我的代码,但我仍然无法在ListView 中显示具有红色子字符串“R2”的文本。

ArrayAdapter<String> adapter new ArrayAdapter<String>(context,
android.R.layout.simple_list_item_1,main_instructions);
listview.setAdapter(adapter);

for(int k = 0 ; k < list_layout.getChildCount(); k++){
String s = main_instrutions[k];
if(s.contains("R2")){
TextView v = (TextView) listview.getChildAt(k);
s = s.replaceAll("R2","");
v.setTypeface(Typeface.DEFAULT_BOLD);
v.setTextColor(Color.RED);
v.setText(s);
adapter.notifyDataSetChanged();
listview.invalidate();
}

我认为我的想法是正确的,但无法将这些特定行更改为 红色文本。如果有人有建议那就太好了。

谢谢

【问题讨论】:

  • 尝试在适配器中这样做
  • 发布你的适配器
  • 你正在调用 adapter.notifyDataSetChanged();更改视图颜色后,您应该在 Adapter 类中执行此操作。

标签: android listview layout


【解决方案1】:

这很容易,由于某种原因我停止使用ListView,moemt RecyclerView 已发布,但逻辑是一样的。如果是我,我会首先创建一个

1.data model 不像必须制作 substring 它丑陋且不推荐 示例模型看起来像

public class myModel{

private String myString;
private int viewColor;

public myModel(String myString, int viewColor)
{
 this.myString = myString;
 this.viewColor = viewColor;
}
....
}
  1. 创建public static final int VIEW_COLOR_RED 和您希望拥有的所有其他颜色
  2. 初始化模型时,请指定视图类型,例如 list.add("this String", VIEW_COLOR_RED);
  3. 在您的列表视图适配器中使用此模型,您可能想通过 Google 搜索如何使用模型而不是字符串。
  4. 我不确定listview 自从我上次使用它以来已经很久了,但是在recyclerview 中我们有一个名为onBindViewHolder() which is in charge of inflating the adapter so you look for the method in your adapter where you inflate the view and do something like 的方法

    if(myModel.getViewType == VIEW_COLOR_RED) { txt_price.setTextColor(ContextCompat.getColor(context,R.color.red); }

就这么简单,祝你好运,如果你问我,我强烈建议你更轻松地切换到 RecyclerView,以防你需要 recyclerview 的完整代码和一个在下面切换 textcolor 注释的适配器,我有代码可以做到这一点。

【讨论】:

  • 我没有使用电脑,我的代码是我自己写的,所以它可能无法在那里工作
  • 我刚刚发现对“listview.getChildCount() 的调用返回零.. 我不知道为什么.. 如果列表视图已使用适配器初始化。我怎样才能访问孩子此列表视图的视图?
  • 适配器是否显示?
  • 适配器显示是什么意思?列表视图显示在手机屏幕上,所以我猜他们一定在显示。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2011-05-30
  • 2012-10-10
  • 1970-01-01
  • 2013-12-10
  • 1970-01-01
  • 2021-09-09
  • 1970-01-01
相关资源
最近更新 更多