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()にキャストvCheckBoxます。

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");

クリック時に を無効にする必要があることが確実な場合は、パラメーターの受け渡しをスキップして、 を無効に設定するだけです。CheckBoxAsyncTaskCheckBoxonClick()

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 に答える