刷新视图?

时间:2013-03-18 01:24:40

标签: java android

我有一个使用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以及字符串并将它们转换回另一端的类型吗?

1 个答案:

答案 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不符合该规范。