在执行某些操作后设置ListView backgroundColors

时间:2014-03-24 19:22:53

标签: java android listview android-listview

我基本上想知道改变android中listview颜色的最佳方法。这是对正在发生的事情的基本解释,我获取列表的数据并填充它,然后我针对列表视图的文本运行情绪分析api,在情绪收集的onPostExecute中我然后想要更改颜色列表视图为绿色表示正面,红色表示负面。

我已经在onPostExecute方法中查看了我的字符串列表,并添加了正,负和中性的值。

                for(int index = 0; index<sentiments.size();index++)
        {
            if(sentiments.get(index).contains("positive"))
            {
                occurrencesPos++;
                      //ViewTweet.getChildAt(index).setBackgroundColor(Color.GREEN);

            }
            if(sentiments.get(index).contains("negative"))
            {
                occurrencesNeg++;

            }
            if(sentiments.get(index).contains("neutral"))
            {
                occurrencesNeu++;
            }

请注意注释掉的行不适用于我,因为它只适用于作为可见实体的孩子,即前5个,但我有时会列出50个以上的列表。但是,如果我只搜索5个数据项的列表,它会产生所需的效果。

列表的填充如下:这是在onPostExecute方法中单独的aSyncTask中执行的。

    ArrayList<Map<String, String>> list = buildData();
       String[] from = { "name", "content" };
       int[] to = { android.R.id.text1, android.R.id.text2 };

       SimpleAdapter adapter = new SimpleAdapter(activity, list,
           layout.list_layout, from, to);
       setListAdapter(adapter);




    // Creation of content to be added to be displayed in list
     private ArrayList<Map<String, String>> buildData() {
       ArrayList<Map<String, String>> list = new ArrayList<Map<String, String>>();
       for(int i = 0;i<tweetContent.size();i++)
       {
       list.add(putData("@"+usernames.get(i),tweetContent.get(i)));
       }
       return list;
     }

     private HashMap<String, String> putData(String string, String string2) {
       HashMap<String, String> item = new HashMap<String, String>();
       item.put("name", string);
       item.put("content", string2);
       return item;
     }

简而言之,正在发生的事情,使用api调用从twitter获取推文将值传递到两个字符串列表tweetcontent和username,然后用于填充列表,一旦列表填充,我调用第二个异步任务调用一个情感分析api,我把结果放到一个新的字符串列表中,并计算pos,neg,neu出现的数量以传递给图表,但我想更新列表颜色以匹配来自的正负值和中性值第二次onPostExecute,这可能吗?

3 个答案:

答案 0 :(得分:1)

为什么不创建数组并存储每个项目的颜色,并在获取视图中将该颜色指定为bg颜色。

答案 1 :(得分:0)

我肯定会扩展ArrayAdapter(如果您还没有)并在getView()方法中实现此逻辑。在View内管理任何 AsyncTask内容并不是一个好主意,因为这些内容旨在处理非View相关任务。

话虽如此,如果扩展ArrayAdapter,该函数的第二个参数(View,通常称为convertView)包含每个行的布局,因此您可以根据sentiments值轻松更改其背景。例如:

if (sentiments.get(index).contains("positive")) {
  // Do whatever you need to do, and...

  convertView.setBackground(R.id.your_new_background);
}

您可以指定任何DrawableColor或类似的新背景。

答案 2 :(得分:0)

理想情况下我想这样做:

  • 传递给listview适配器的datamodel已经由情绪分析器处理,并且它有标志用于我们应该创建视图。我可以将颜色设置为&#34; getView&#34;适配器方法,其中&#34; convertView&#34;在方法参数中 getView(int position,View convertView,ViewGroup parent)映射到屏幕上可用的确切视图