私は非同期タスクを持っています。ダイアログフラグメントの oncreate ビューで、以下のように asynctask のオブジェクトを作成しています (サンプルコード)
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,Bundle savedInstanceState) {
cashInValidatorListner = new CashInValidatorListner(mSessionManager.getCustomerId(),mSessionManager.getPosId(), this);
}
今onclickで非同期タスクを実行しています
@Override
public void onClick(View v) {
if(v==ok)
{
if(mHomeActivity.mProgressDialog!=null && !mHomeActivity.mProgressDialog.isShowing()){
mHomeActivity.mProgressDialog.show();
}
cashInValidatorListner.execute();
}
}
このプログレスバーに oncancellistner を追加しました
@Override
public void onCancel(DialogInterface dialog) {
if(dialog==mProgressDialog)
{
mDialogExtraOptions.cashInValidatorListner.cancel(true);
Toast.makeText(getBaseContext(), "Task Cancled", Toast.LENGTH_SHORT).show();
}
}
初めて非同期タスクをキャンセルすると、キャンセルされますが、もう一度実行すると、既に実行されたタスクを実行できないというエラーが表示されます。
ユーザーがOKボタンをクリックするたびにonclickでオブジェクトを作成しようとすると、このように問題が解決されます
@Override
public void onClick(View v) {
if(v==ok)
{
if(mHomeActivity.mProgressDialog!=null && !mHomeActivity.mProgressDialog.isShowing()){
mHomeActivity.mProgressDialog.show();
}
cashInValidatorListner = new CashInValidatorListner(mSessionManager.getCustomerId(),mSessionManager.getPosId(), this);
cashInValidatorListner.execute();
}
}
ここでは問題なく動作します。最初のケースで 2 回目に実行したときに非同期タスクが実行されなかったのはなぜですか?