我有一个使用AsyncTask创建动态表的视图。唯一的麻烦是在此期间我创建了一些复选框,但是一旦用户检查了它们,我想要禁用该框。但由于它们的动态创建方式,我无法获得将它们设置为禁用的引用。
所以这就是我如何在循环中创建按钮:
while(it.hasNext()){
if(checkStatus(it.next())){
myCheckbox.setChecked(true);
myCheckbox.setEnabled(false);
}else{
myCheckbox.setOnClickListener(new OnClickListener() {
public void onClick(View v) {
buyU asyncTask = new buyU();
asyncTask.execute("value1");
}
});
}
}
因此,当按下按钮时,我的asyncTask会运行。但我不能修改复选框,因为我没有它的参考。我无法传递一个我不认为的引用,因为我正在使用传递参数来发送带有一些值的字符串。所以我认为最简单的方法是再次刷新整个页面。
这样做的好方法是什么?
或者我可以将按钮作为对象传递给asyncTask以及字符串并将它们转换回另一端的类型吗?
答案 0 :(得分:1)
您可以传递Object
,只需添加实例变量和构造函数。由于我们是从onClick()
执行此操作,因此我们会将v
投射到CheckBox
:
Checkbox c;
public buyU (CheckBox checkbox)
{
c = checkbox;
}
@Override
protected void onPostExecute (Result result)
{
c.setChecked (false);
c.setEnabled (false);
}
然后致电:
CheckBox check = (CheckBox) v;
buyU asyncTask = new buyU(check);
asyncTask.execute("value1");
如果您确定单击时应禁用CheckBox
,则可以跳过AsyncTask
param传递并将CheckBox
设置为已在onClick()
中禁用。
public void onClick(View v) {
((CheckBox)v).setChecked (false);
v.setEnabled (false);
buyU asyncTask = new buyU();
asyncTask.execute("value1");
}
我也厌倦了那个封闭的循环,如果它在UI线程中运行,请确保它不会长时间运行。
像往常一样,Java类以大写字母开头,buyU
不符合该规范。