ListView准备好后?

时间:2016-06-10 09:19:33

标签: android listview

我想更改插入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()无效。

4 个答案:

答案 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项目。如果它会帮助你它会很好。 无论如何,请留下您的反馈。