我有MainActivity
ViewPager
。 ViewPager
由两个Fragments
组成,每个RecyclerView
持有一个RecyclerView
。我需要在Fragment
中引用RecyclerView
来更新/动画等。
屏幕旋转时出现问题,因为由于某种原因,我无法将成员变量设置回public abstract class NotifListFragment extends Fragment {
protected RecyclerView mRecyclerView;
public NotifListFragment() {
// Required empty public constructor
EventBusHelper.getBus().register(this);
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
// Inflate the layout for this fragment
mRecyclerView = (RecyclerView) inflater.inflate(R.layout.fragment_notif_list, container, false);
setupRecyclerView(mRecyclerView);
return mRecyclerView;
}
。
onCreateView
所以在这里mRecyclerView
我总是给片段充气并在Fragment
变量中保存引用。但是,当我稍后尝试访问它时,它为空。
我正在使用Otto来同时调用onDataChanged()
&#39 {s} RecyclerView
方法。当按下@Subscribe
public void onDataChanged(DataChangedEvent event) {
List<CustomNotification> oldData = ((NotifRecyclerViewAdapter) mRecyclerView.getAdapter()).getmValues();
List<CustomNotification> newData = getNotifications();
}
中的按钮时调用它。
mRecyclerView.getAdapter()
此调用中getView()
为空。
Fragment&#39; template <class T>
SearchType findChild(QQuickItem* object, const QString& objectName)
{
QList<QQuickItem*> children = object->childItems();
foreach (QQuickItem* item, children)
{
if (QQmlProperty::read(item, "objectName").toString() == objectName)
return item;
T child = findChild<QQuickItem*>(item, objectName);
if (child)
return child;
}
return nullptr;
}
也返回null。发生了什么事?
答案 0 :(得分:0)
我发现有些事情在这里错了。请不要在setupRecyclerView(mRecyclerView);
中致电onCreateView()
,这应该在activityCreated()
上调用,因为在此之前您的片段可能尚未附加到您的活动中。另外,我不喜欢在那里做findViewByIds
。
使用onViewCreated()
和onActivityCreated()
回调。
所以你的代码看起来像这样。
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
return inflater.inflate(R.layout.fragment_notif_list, container, false);
}
@Override
public void onViewCreated(View view, @Nullable Bundle savedInstanceState) {
super.onViewCreated(view, savedInstanceState);
mRecycler = (RecyclerView) view.findViewById(R.id.yourId);
}
@Override
public void onActivityCreated(@Nullable Bundle savedInstanceState) {
setupRecyclerView(mRecycler);
}
在您致电onDataChanged()
期间可能没有添加该片段。在那里做一个空检查。