我使用一個異步任務,我要改變每行的顏色兩次,如何從異步任務更改列表視圖行的顏色?
即
1.I想在開始我的長期運行的任務之前,更改行的顏色
2.我想在完成長時間運行任務後更改行的顏色
1.and 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;
}}
這是onItemClick代碼:
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。更新適配器中的數據並讓適配器相應地設置背景 –