Android 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

我有一个ListFragment,用于显示基于特定日期的数据列表。 这一天作为参数从my fragmentStatePagerAdapter的
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));
}