我正在尝试创建一个样板片段。当我尝试设置我的RecyclerView的LayoutManager时,我一直得到一个空引用错误:
尝试调用虚方法' void android.support.v7.widget.RecyclerView.setLayoutManager(android.support.v7.widget.RecyclerView $布局管理)' 在空对象引用上
以下是我调用以获取错误的顺序:
Main.class:
public class PagerAdapter extends FragmentPagerAdapter {
...
@Override
public Fragment getItem(int position){
switch(position){
default:
return new WhatsNew();
}
}
}
WhatsNew.class:
public class WhatsNew extends Base {
private LayoutInflater mInflater;
private Handler mHandler = new Handler();
private RecyclerView.LayoutManager mLayoutManager;
@Override
public void init() {
mInflater = LayoutInflater.from(mContext);
mLayoutManager = new LinearLayoutManager(mContext);
mDataView.setLayoutManager(mLayoutManager); //<-- Where the null reference is
}
@Override
public void doWork() {
WhatsNewAdapter mAdapter = new WhatsNewAdapter();
mDataView.setAdapter(mAdapter);
...
}
...
}
Base.class:
public class Base extends Fragment {
public View mView;
public RecyclerView mDataView;
public ProgressBar mProgressBar;
public Context mContext;
public Base() { }
@Override
public void onAttach(Activity mActivity) {
mContext = mActivity;
init();
doWork();
}
@Override
public View onCreateView(LayoutInflater _i, ViewGroup _vg, Bundle savedInstanceBundle){
mView = _i.inflate(R.layout.f_base, null);
mDataView = (RecyclerView) mView.findViewById(R.id.data);
mProgressBar = (ProgressBar)mView.findViewById(R.id.loading);
return mView;
}
public void init() { }
public void doWork() { }
}
我从here读到我应该覆盖onAttach(Activity activity)
以确保上下文不为空,但是从错误中看,它似乎仍为空。任何人都知道为什么我会偶然得到这个错误或者对如何设置我的样板片段有更好的建议?对不起,如果代码看起来不好,我正在尝试更好地学习使用片段。 :)
答案 0 :(得分:4)
您的mDataView
尚未初始化。
onAttach()
之前调用 onCreateView()
。在init()
初始化mDataView
之前调用使用mDataView
的{{1}}。
将需要访问片段视图的代码推迟到onCreateView()
或更高版本。
答案 1 :(得分:1)
onAttach()
之前调用 onCreateView()
。
所以mDataView在init()时为null。
我建议在init()
doWork()
和onViewCreated()