我有一个应用程序可以下载数据,这些数据必须显示在viewpager
. 我不知道如何在数据下载中ListFragment
adaptername.notifyDataSetChanged()
调用AsyncTask
。
例如,假设我正在下载未来 7 天的气温预报:
我的应用程序具有以下结构:
MainActivity
:开始AsyncTask
下载数据onCreate()
并让用户选择(button
)查看哪一天。单击按钮启动SecondActivity
并将日期索引传递给ViewPager
(以设置当前视图)。
SecondActivity
:包含一个ViewPager
包含 7 个相同ListFragments
的(列表显示 5 小时内的温度,因此列表有 5 个条目)。MyListFragment
:当这个加载它设置adapter
显示每个温度(如果数据已下载),否则它将温度设置为"loading..."
现在我的问题是,如果用户等待MainActivity
数据下载,他们可以继续ViewPager
查看ListFragment
温度,没有问题。但是如果他们尝试点击一天并 ViewPager
在下载完成之前加载片段将永远只是说 "loading..."
我需要一种可以在我的 in 中重新加载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 中完成下载时,我需要一种方法来刷新当前显示的片段。