【发布时间】:2016-12-26 21:39:36
【问题描述】:
我正在使用异步任务,我想将每行的颜色更改两次,
即
1.我想在开始长时间运行的任务之前更改行的颜色
2.我想在完成长时间运行的任务后更改行的颜色
1.和2.都来自doinBackground。
这是我的适配器:
ArrayAdapter<String> arrayAdapter = new ArrayAdapter<String>(MainActivity.this,android.R.layout.simple_list_item_1,al);
listView.setAdapter(arrayAdapter);
这是我的异步任务
class AT extends AsyncTask<List<String>,Void,Void>{
@Override
protected Void doInBackground(List<String>... list) {
for(int i=0;i<n;i++){
//iterating my list , so that for every item of my list,i am performing my long running task and changing the color of rach row
final int t=i;
//trying to change the associate row color before starting my task
handler.post(new Runnable() {
@Override
public void run(){
Log.d("sri","listView.performItemClick;");
listView.performItemClick(listView.getAdapter().getView(t,null,listView),t,t);
}});
try {
Thread.sleep(5000);
Log.d("TAG","doInBackground =====> Thread.sleep(5000);");
} catch (InterruptedException e) {
e.printStackTrace();
}
//my long running task would be here
try {
Thread.sleep(3000);
Log.d("sri","doInBackground =====> Thread.sleep(3000);");
} catch (InterruptedException e) {
e.printStackTrace();
}
//trying to change the associate row color after completing my task
handler.post(new Runnable() {
@Override
public void run(){
Log.d("sri","listView.performItemClick;");
listView.performItemClick(listView.getAdapter().getView(t,null,listView),t,t);
}});
}
return null;
}}
这是onItem点击代码:
listView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> adapterView, View view, int i, long l) {
Log.d("TAG","onItemClick --> pos is " + i + "-->id is " + l );
view.setBackgroundColor(Color.parseColor("#1234ab"));
//adapterView.getChildAt(i-adapterView.getFirstVisiblePosition()).setBackgroundColor(Color.BLUE);
Log.d("TAG","onItemClick --> pos is " + i + "-->id is " + l );
}
});
我的问题是
行 *listView.performItemClick 调用 OnItemClick 代码 * (并且 变量 pos 和 id 是正确的) ,但是 view.setBackgroundColor(Color.parseColor("#1234ab"));没有效果,所以颜色没有变化。
【问题讨论】:
-
不要从 AsyncTask 更新 ListView UI。更新适配器内的数据,让适配器相应地设置背景
标签: android listview android-asynctask android-arrayadapter