片段内的私有变量都是null,为什么?

时间:2016-01-29 01:54:49

标签: android android-fragments

我在片段中有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;片段创建后,私有变量都消失了。

1 个答案:

答案 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>