我正在使用异步任务,我想两次更改每行的颜色,
即
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;
}}
这是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”));没有效果,所以颜色没有变化。
答案 0 :(得分:0)
试试这个:
listView.setOnItemClickListener(new OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> adpterView, View view, int position,
long id) {
listView.getChildAt(i).setBackgroundColor(Color.BLUE);
}
}
});
答案 1 :(得分:0)
你不能这样做,只要用户滚动,改变就会丢失。您可以做的是将项目标记为在数组中选择并且notifydatasetChanged并在您的适配器中进行检查,或者一个简单的替代方法是将项目设置为选中,如此处所述(https://stackoverflow.com/a/10791326/2418640)。