Fragment を含むフラグメントアクティビティがあり、 Fragment はデータをダウンロードする Asynctask を開始します。 Fragment にコールバックメソッドを実装し、アダプターとリストビューの値を更新します。私が抱えている問題は次のとおりです。これは私の onCreateView メソッドです(重要な部分):
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
list=(PullToRefreshListView)v1.findViewById(R.id.listapull);
adapterList=new ListViewAdapter(secciones, mContext);
}
AsyncTask の実行中にデバイスを回転すると、doInBackground() メソッドが実行され続け、実行後、リスナーがトリガーされ、フラグメントでコールバック メソッドが開始されます。このメソッドには、アダプターとリスト ビューの古い参照があります。
向きの変更が発生するとフラグメントとそのコンテンツが再作成され、それは正しいですが、向きの変更前に作成されたアダプターとリストビューへの参照をコールバックメソッドが保持している理由を知っている人はいますか?
編集:
次のように asynctask を実行するボタンがあります。
asyncRefresh = new PullRefreshTask(taskContext, mContext, secciones);
asyncRefresh.setUpdatePull2RefreshListener(this);
asyncRefresh.execute();
ユーザーがボタンを押すと、asyncTask は古い Fragment をリスナーとして設定し、asynctask の実行中に方向の変更が発生すると、アクティブ化されたコールバック メソッドは新しく作成されたフラグメント メソッドのものであると考えましたが、もうわかりません。
編集2:
最初の編集でコールバックメソッドが古いフラグメントに対して呼び出されていたと言ったように、私は問題を解決しました。だから私がしたことは、「Info」という名前の別のクラスの変数に asynctask を保存し、作成ビューでこれを行ったことです:
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
list=(PullToRefreshListView)v1.findViewById(R.id.listapull);
adapterList=new ListViewAdapter(secciones, mContext);
PullRefreshTasktask task = Info.getAsyncTask();
asyncRefresh = task;
asyncRefresh.setUpdatePull2RefreshListener(this);
}
このようにして、フラグメントの新しい参照を
setUpdatePull2RefreshListener()
実行中の asynctask のメソッド