我花了一点时间试图找出一种方法来将标头添加到 RecyclerView
,但没有成功。
这是我到目前为止得到的:
@Override
protected void onCreate(Bundle savedInstanceState) {
...
layouManager = new LinearLayoutManager(getActivity());
recyclerView.setLayoutManager(layouManager);
LayoutInflater inflater = (LayoutInflater) getActivity().getSystemService(Context.LAYOUT_INFLATER_SERVICE);
headerPlaceHolder = inflater.inflate(R.layout.view_header_holder_medium, null, false);
layouManager.addView(headerPlaceHolder, 0);
...
}
LayoutManager
似乎是处理 RecyclerView
项目处置的对象。由于我找不到任何 addHeaderView(View view)
方法,我决定使用 LayoutManager
的 addView(View view, int position)
方法并在第一个位置查看我的标题方法—充当标题。
啊,这就是事情变得更丑陋的地方:
java.lang.NullPointerException: Attempt to read from field 'android.support.v7.widget.RecyclerView$ViewHolder android.support.v7.widget.RecyclerView$LayoutParams.mViewHolder' on a null object reference
at android.support.v7.widget.RecyclerView.getChildViewHolderInt(RecyclerView.java:2497)
at android.support.v7.widget.RecyclerView$LayoutManager.addViewInt(RecyclerView.java:4807)
at android.support.v7.widget.RecyclerView$LayoutManager.addView(RecyclerView.java:4803)
at com.mathieumaree.showz.fragments.CategoryFragment.setRecyclerView(CategoryFragment.java:231)
at com.mathieumaree.showz.fragments.CategoryFragment.access$200(CategoryFragment.java:47)
at com.mathieumaree.showz.fragments.CategoryFragment$2.success(CategoryFragment.java:201)
at com.mathieumaree.showz.fragments.CategoryFragment$2.success(CategoryFragment.java:196)
at retrofit.CallbackRunnable$1.run(CallbackRunnable.java:41)
at android.os.Handler.handleCallback(Handler.java:739)
at android.os.Handler.dispatchMessage(Handler.java:95)
at android.os.Looper.loop(Looper.java:135)
at android.app.ActivityThread.main(ActivityThread.java:5221)
at java.lang.reflect.Method.invoke(Native Method)
at java.lang.reflect.Method.invoke(Method.java:372)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:899)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:694)
在获得几个 NullPointerExceptions
尝试调用 addView(View view)
在活动创建的不同时刻(也尝试在一切设置完成后添加视图,甚至是适配器的数据)之后,我意识到我有不知道这是否是正确的方法(看起来不是)。
PS:此外,除了 LinearLayoutManager
之外,还可以处理 GridLayoutManager
的解决方案将不胜感激!
原文由 MathieuMaree 发布,翻译遵循 CC BY-SA 4.0 许可协议
我不得不在我的
RecyclerView
添加一个页脚,我在这里分享我的代码片段,因为我认为它可能有用。请检查代码中的注释,以便更好地理解整体流程。上面的代码片段向
RecyclerView
添加了一个页脚。您可以检查 此 GitHub 存储库 以检查添加页眉和页脚的实现。