我基本上想知道改变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,这可能吗?
答案 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);
}
您可以指定任何Drawable
,Color
或类似的新背景。
答案 2 :(得分:0)
理想情况下我想这样做: