我在片段中有null对象。基本思想是我有一个异步获取数据库的活动。然而,我将在其中填充数据的recyclelerview存在于片段中。伪代码或多或少
活动:
public void onCreate(Bundle savedInstanceState) {
//kicks off a query to the server
mData = new Gson().fromJson(getIntent().getExtras().getString(Constants.MYDATA), MyData.class);
if (mVenue == null) {
finish();
return;
}
// a bunch of stuff
// create a fragment
mMyFrag = new MyFrag();
}
public void CallBackWhenDone(final List<DataSet> dataset) {
// notify the frag that we are done
mMyFrag.notifyDataSetChanged(messages);
}
FRAGMENT:
private RecyclerView mRV;
private ParentActivity mActivity;
private ActivityAsynchData mAsynchData;
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
View view = inflater.inflate(R.layout.recycler, container, false);
mRV = (RecyclerView) view.findViewById(R.id.list);
mRV.setLayoutManager(new LinearLayoutManager(getActivity().getApplicationContext(), LinearLayoutManager.VERTICAL, false));
if (null != mActivity) {
mAsynchData = mActivity.GetAsynchData();
}
if (null != mAsynchData) {
mRV.setAdapter(new MyRecyclerAdapter(getActivity(), mAsynchData));
}
}
// mRV is null when the activity "CallBackWhenDone" calls the frag
// all private variables are gone! why?
public void notifyDataSetChanged(final List<Message> messages) {
MyRecyclerAdapter adapter = ((MyRecyclerAdapter) mRV.getAdapter());
adapter.setMessageList(messages);
adapter.notifyDataSetChanged();
}
我最终破坏了我的回收商(在这种情况下为mRV)视图是静态的,但这看起来非常黑。
任何方式?换句话说,我怎样才能获取我的&#34; mRV&#34;片段创建后,私有变量都消失了。
答案 0 :(得分:4)
我能理解的是,您初始化了片段并尝试访问该片段中的回收器视图,但它会将您丢弃。看到它为空,我并不感到惊讶。你调用方法的方式不正确。你需要获取托管和已经运行的片段,实例尝试这样做:
如果您使用支持片段,请使用getSupportFragmentManager
代替getFragmentManager
。
MyFrag fragment = (MyFrag) getFragmentManager().findFragmentById(R.id.fragmentHolder);
fragment.<specific_function_name>();
此处,R.id.fragmentHolder
是框架布局的ID或用于在活动中托管片段的任何布局。
<FrameLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/fragmentHolder"
android:layout_width="match_parent"
android:layout_height="match_parent"></FrameLayout>