のフラグメント内に表示する必要があるデータをダウンロードするアプリがありますviewpager
。データのダウンロードを行うを呼び出す方法がわかりListFragment
adaptername.notifyDataSetChanged()
ません。AsyncTask
たとえば、次の 7 日間の気温予報をダウンロードするとします。
私のアプリの構造は次のとおりです。
MainActivity
:AsyncTask
でデータのダウンロードを開始し、表示する日付をonCreate()
ユーザーに選択させます (button
)。ボタンをクリックすると、 (現在のビューを設定するために)が起動SecondActivity
し、日のインデックスが渡されます。ViewPager
SecondActivity
:ViewPager
同じものを 7 つ含む a が含まれていますListFragments
(リストには 5 時間にわたる温度が表示されるため、リストには 5 つのエントリがあります)。MyListFragment
: これが読み込まれると、adapter
各温度を表示するように設定されます (データがダウンロードされている場合)。それ以外の場合は、温度が"loading..."
今私の問題は、ユーザーがデータがダウンロードされるまで待っている場合、問題なく温度を確認するためににMainActivity
進むことができることです。しかし、ダウンロードが完了する前に 1 日クリックしてロードしようとすると、フラグメントは永遠に言うだけですViewPager
ListFragment
ViewPager
"loading..."
ListFragment
のからonPostExecute()
内にアダプタをリロードできる方法が必要AsyncTask
ですMainActivity
。ListFragment
これを行うには、表示されているに実際にアクセスできる必要がありますViewPager
。アダプターを更新するにはどうすればよいonPostExecute()
ですか?
主な活動:
protected void onCreate(Bundle savedInstanceState) {
...
new LoadData().execute();
}
protected class LoadData extends AsyncTask<String, Void, String> {
protected String doInBackground(String... params) {
//Download happens here
}
protected void onPostExecute(String result) {
//I need to tell the viewpager in SecondActivity to reload the ListFragment it is currently showing here
}
}
セカンドアクティビティ
private ViewPager mPager;
private PagerAdapter mPagerAdapter;
private int[] temperatureArray;
public void onCreate(Bundle savedInstanceState) {
...
Intent intent = getIntent();
int[] defaultTemps = {0, 0, 0, 0, 0};
temperatureArray = getIntArrayExtra("temps", defaultTemps);
mPager = (ViewPager) findViewById(R.id.pagerID);
mPager.setCurrentItem(intent.getIntExtra("page", 0));
mPagerAdapter = new MyPagerAdapter(getSupportFragmentManager());
mPager.setAdapter(mPagerAdapter);
}
private class ScreenSlidePagerAdapter extends FragmentStatePagerAdapter {
...
public Fragment getItem(int position) {
MyListFragment lf = new MyListFragment();
lf.setTemperatures(temperatureArray);
return lf;
}
}
AsyncTask でのダウンロードが終了したときに、現在表示されているフラグメントを更新できるようにする方法が必要です。