【发布时间】:2015-06-17 11:37:17
【问题描述】:
我在 FragmentPagerAdpater 中有一个片段。 Fragment 基本上是一个 RecyclerView。 RecyclerView 的来源由 Fragment 内部的 Loader 提供。
我的问题是列表在第一次实例化时显示为空。但是当我旋转屏幕时,它看起来很好。
您知道会出什么问题吗? 如果需要,我很乐意提供一些(或很多)代码。告诉我你想看哪些部分。
这是来自父活动的代码:
public class MyFragmentPagerAdapter extends FragmentPagerAdapter {
public MyFragmentPagerAdapter(FragmentManager fm) {
super(fm);
}
@Override
public Fragment getItem(int i) {
switch (i) {
case 0:
//We return an instance of the RouteListFragment
RouteListFragment frag = RouteListFragment.getInstance(session.getId());
return frag;
case 1:
//We return an instance of the RouteSpotListFragment
RouteSpotListFragment frag2 = RouteSpotListFragment.getInstance(sessionSpot.getId());
return frag2;
default :
return null;
}
}
来自Fragment的主要方法:
public static RouteListFragment getInstance (int sessionId){
RouteListFragment frag = new RouteListFragment();
Bundle bundle = new Bundle ();
bundle.putInt(SESSION_ID, sessionId);
frag.setArguments(bundle);
return frag;
}
/* (non-Javadoc)
* @see android.app.Fragment#onCreate(android.os.Bundle)
*/
@Override
public void onCreate(Bundle savedInstanceState) {
//We extract the RouteList from the Bundle
Bundle bundle = getArguments();
sessionId = bundle.getInt(SESSION_ID);
//We create a MyRouteListAdapter with a null cursor
Cursor cursor = null;
routeListAdapter = new MyRouteListAdapter(cursor, getActivity());
updateList();
super.onCreate(savedInstanceState);
}
/* (non-Javadoc)
* @see android.app.Fragment#onCreateView(android.view.LayoutInflater, android.view.ViewGroup, android.os.Bundle)
*/
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
//Inflate the layout
layout = (RelativeLayout) inflater.inflate(R.layout.fragment_route_list, container, false);
routeSource = new RouteDataSource (getActivity());
//Now that we have the routeSource, we can prepare the routeListAdapter
routeRecyclerList = (RecyclerView) layout.findViewById(R.id.route_list_view);
// use a linear layout manager
mLayoutManager = new LinearLayoutManager(getActivity());
routeRecyclerList.setLayoutManager(mLayoutManager);
routeRecyclerList.setAdapter(routeListAdapter);
return layout;
}
public void updateList(){
/*
* we get the loaderManager to start the query
* If a Loader has already been initiated, we need to reload it. Otherwise the
* onCreateLoader callback method will not be called
* Else, we initiate a Loader
*/
LoaderManager manager = getLoaderManager();
if (manager.getLoader(LOADER_GET_ALL_ROUTES)!= null)
manager.restartLoader(LOADER_GET_ALL_ROUTES, null, this);
else manager.initLoader(LOADER_GET_ALL_ROUTES, null, this);
}
最后,我将 onLoadFinished() 回调方法中的光标作为 LoaderManager.Callback 方法的一部分进行交换。
编辑:我刚刚意识到,如果我等待 LoaderManager 完成加载(1-2 秒),然后再滑动包含 Loader 的 Fragment,就会显示内容。
我不知道新信息是否会改变任何东西。我仍然很困,肯定需要帮助。
【问题讨论】:
-
你能显示onCreate方法的代码吗..
-
@Moinkhan 我刚刚添加了一些代码。
-
您在哪里交换光标并通知 RecyclerView 更改?
-
将
super.onCreate(savedInstanceState);移动到onCreate的第一行试试这个.. -
@Selvin ,我在 onLoadFinished() 回调方法中交换光标作为 LoaderManager.Callback 方法的一部分。
标签: android android-fragments android-recyclerview fragmentpageradapter