1

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

4

1 回答 1

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参数传递,只需CheckBoxonClick().

public void onClick(View v) {
  ((CheckBox)v).setChecked (false);
  v.setEnabled (false);
  buyU asyncTask = new buyU();
  asyncTask.execute("value1");
}

我也会厌倦那个封闭循环,如果它在 UI 线程中运行,请确保它不会长时间运行。

像往常一样,Java 类以大写字母开头,buyU不符合该规范。

于 2013-03-18T01:43:45.560 回答