Java 刷新视图?

Java 刷新视图?,java,android,Java,Android,我有一个使用AsyncTask创建动态表的视图。唯一的问题是,在此期间,我创建了一些复选框,但一旦用户选中了它们,我就想禁用该复选框。但是由于创建它们的动态方式,我无法获得将它们设置为禁用的引用 下面是我如何在循环中创建按钮: while(it.hasNext()){ if(checkStatus(it.next())){ myCheckbox.setChecked(true); my

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

您可以传递
对象
,只需添加实例变量和构造函数。由于我们是从
onClick()
执行此操作,因此将
v
强制转换为
复选框

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");
如果您确定单击后应禁用
复选框
,则可以跳过
异步任务
参数传递,只需在
onClick()中将
复选框
设置为禁用即可

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


通常,Java类以大写字母开头,
buyU
不符合该规范。

您可以传递
对象,只需添加实例变量和构造函数。由于我们是从
onClick()
执行此操作,因此将
v
强制转换为
复选框

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");
如果您确定单击后应禁用
复选框
,则可以跳过
异步任务
参数传递,只需在
onClick()中将
复选框
设置为禁用即可

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


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

这是天才,我不知道你能做到这一点。我知道可以在其他类上实现,但出于某种原因,我从未想过使用Async。谢谢你的建议,你是个明星!此外,该循环在asyncTask中的PostExecute中运行,并且在执行过程中会显示一个进度对话框,因此它对UI不应该是一个问题?@EricBanderhide如果在UI线程中运行一个循环,即使您确实有一个对话框,您仍然会阻塞该线程。如果应用程序是一个长时间运行的循环,Android应该仍然提供关闭该应用程序的服务。你应该做一些测试,自己看看。谢谢AC,用户只需按“后退”按钮就可以取消异步任务。这真是天才,我不知道你能做到这一点。我知道可以在其他类上实现,但出于某种原因,我从未想过使用Async。谢谢你的建议,你是个明星!此外,该循环在asyncTask中的PostExecute中运行,并且在执行过程中会显示一个进度对话框,因此它对UI不应该是一个问题?@EricBanderhide如果在UI线程中运行一个循环,即使您确实有一个对话框,您仍然会阻塞该线程。如果应用程序是一个长时间运行的循环,Android应该仍然提供关闭该应用程序的服务。您应该做一些测试并亲自查看。感谢AC,用户只需按“上一步”按钮即可取消异步任务。