Android fragmentStatePagerAdapter我的片段上的数据正确,但适配器不正确
我有一个ListFragment,用于显示基于特定日期的数据列表。 这一天作为参数从my fragmentStatePagerAdapter的Android fragmentStatePagerAdapter我的片段上的数据正确,但适配器不正确,android,android-viewpager,android-pageradapter,Android,Android Viewpager,Android Pageradapter,我有一个ListFragment,用于显示基于特定日期的数据列表。 这一天作为参数从my fragmentStatePagerAdapter的getItem()函数传递 public Fragment getItem(int position) { Calendar calendar = Calendar.getInstance(); calendar.add(Calendar.DAY_OF_YEAR, -(mNumDays - (position + 1
getItem()
函数传递
public Fragment getItem(int position) {
Calendar calendar = Calendar.getInstance();
calendar.add(Calendar.DAY_OF_YEAR, -(mNumDays - (position + 1)));
return MyFragment.initNewInstance(calendar.getTimeInMillis(),
position,
mNumDays);
}
我还有一个LoaderManager,在发布数据库更改时加载数据
在我的ListFragment的onCreate()
函数中,我得到了日期,在onCreateLoader上,我根据该特定日期查询数据库
public void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
this.mDateToShow = getArguments() != null ? getArguments().getString("date") : "";
}
public Loader<Cursor> onCreateLoader(int i, Bundle bundle) {
String sameDay = ChronomasterDatabaseHelper.KEY_DATE_TIME +"='"+ mDateToShow +"'";
return new CursorLoader(getActivity(), uri, null, sameDay, null, null);
}
在线程上:
protected void onPostExecute(ArrayList<Application> result) {
mAdapter.setData(result);
super.onPostExecute(result);
}
您可以使用的一个解决方法是使用mviewpage.setOffscreenPageLimit(0)加载该页面代码>
这样,正在加载的数据就是当前页面的数据。缺点是它看起来不是很平滑,因为每个片段只有在它是当前片段时才会被加载。解决方案是在我的片段上有一个私有的ArrayList,并在那里添加数据
private ArrayList mResults=new ArrayList()代码>
然后在我的线程上,在我的字段中添加数据(不是每次都创建新的ArrayList):
和onListItem单击
public void onListItemClick(ListView listView, View view, int pos, long id)
{
appClicked(mResults.get(pos - 1));
}
您的ListFragment和Details片段是否在同一个viewpager中?您所说的Details片段是什么意思?我的意思是,当您单击列表中的某个项目时,您会在片段中显示额外的数据。不只是一个AlertDialog!哦,那么你的viewpager就充满了列表碎片,但是用户体验会很糟糕。交换会很慢。
@Override
public void onListItemClick(ListView listView, View view, int pos, long id)
{
appClicked(mAdapter.getItem(pos - 1));
}
mResults.add(new Application(data1,data2,data3));
mAdapter.setData(mResults,totalDuration,totalTimes);
public void onListItemClick(ListView listView, View view, int pos, long id)
{
appClicked(mResults.get(pos - 1));
}