我想更改插入ListView的TextView的背景。 ListView包含一系列TextView,并且从一个简单的List中检索每个TextView的值。现在我告诉你我的片段:
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.town_selection);
list = (ListView) findViewById(R.id.list);
adapter = new ArrayAdapter<>(this, R.layout.string_item, App.towns);
list.setAdapter(adapter);
list.setOnItemClickListener(this);
adapter.notifyDataSetChanged();
list.invalidate();
// list.getCount() returns zero!!
// and so, list.getChildAt(...) returns null!!
}
App.towns是我正在谈论的字符串列表,它的长度大于0.当应用程序运行时似乎没问题,因为ListView正在显示项目,但是在onCreate的末尾我需要更改某些项目的背景颜色,但ListView似乎没有准备就像我评论的那样。
notifyDataSetChanged()和invalidate()无效。
答案 0 :(得分:1)
您需要为列表视图编写自定义适配器,并在列表视图中创建每个项目时更改颜色。
这个SO question - Custom Adapter for List View有很好的答案可以帮助您创建这个自定义适配器。您将无法使用ArrayAdapter
按原样执行此操作。
答案 1 :(得分:1)
最好的解决方案是使用自定义适配器而不是ArrayAdapter,然后在自定义适配器的getView()方法中,您可以更改textview的颜色
答案 2 :(得分:1)
如果由于某种原因,您需要更改背景是TextViev,那么有关它的信息应该存储在某个地方,并且使用自定义适配器中的方法更改背景。创建自己的自定义适配器。
答案 3 :(得分:1)
我并没有声称我的答案是最好的,但我有一些想法,我想分享它。
如果你理解的话,你的城镇字符串列表是不可改变的,那就让我们做以下几点:
...
final Context context = this;
String [] towns = new String [] { "town_1", "town_2", "town_3" };
ListView list;
ArrayAdapter<String> adapter;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.town_selection);
list = (ListView) findViewById(R.id.list);
adapter = new ArrayAdapter<String>(this, R.layout.string_item, R.id.string_item_text, towns)
//R.id.string_item_text - id your TextView in item of your list
{
@Override
public View getView(int position, View convertView, ViewGroup parent) {
View v = super.getView(position, convertView, parent);
TextView txtView = (TextView) v.findViewById(R.id.string_item_text);
String sText = txtView.getText().toString();
if (sText.equals("town_1")) {
txtView.setBackgroundColor(Color.parseColor("#93C47D")); //#93C47D - just example
} else if (sText.equals("town_2")){
txtView.setBackgroundColor(Color.parseColor("#6FA8DC")); //#6FA8DC - just example
} else if (sText.equals("town_3")){
txtView.setBackgroundColor(Color.parseColor("#F6B26B"));//#F6B26B - just example
}
return v;
}
};
list.setAdapter(adapter);
...
它帮助我完成了一个Android项目。如果它会帮助你它会很好。 无论如何,请留下您的反馈。