我在片段中有一个recyclerview,该片段位于视图寻呼机内。
notifydatasetchanged()即使相同的代码在我的其他项目中有效,也无法正常工作。我能看到的唯一区别是它现在在一个视图寻呼机内?。
这是通知变更的方式:
public void updateRecyler(){
// Clear the current array
alarmsFromSP.clear();
// Update the array (This is working the array size is changing)
alarmsFromSP.addAll(AlarmCollection.getAlarms(getActivity()));
// Notify the change
adapter.notifyDataSetChanged();
}
我在oncreate中创建recylerview,如下所示:
public class FragmentAllAlarms extends Fragment {
// Arraylist of the alarm data from the strings
ArrayList<Alarm> alarmsFromSP;
tabRefreshReceiver r;
RecyclerView rv;
AlarmsAdapter adapter;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
View v = inflater.inflate(R.layout.fragment_all_alarms, container, false);
// Recycler
rv = (RecyclerView) v.findViewById(R.id.mainAlarmRecyclerView);
rv.setLayoutManager(new LinearLayoutManager(getActivity()));
// Get saved data for alarms from the shared preferences string
alarmsFromSP = AlarmCollection.getAlarms(getActivity());
System.out.println("StringIs"+alarmsFromSP.size());
// Adapter
adapter = new AlarmsAdapter(getActivity(), alarmsFromSP);
rv.setAdapter(adapter);
我有可能失去对数组的引用,还是与viewpager有关?
我已经坚持了两天,现在非常感谢任何帮助。
提前致谢
答案 0 :(得分:0)
确保调用updateRecyler()
,
并尝试将adapter.notifyDataSetChanged();
更改为rv.getAdapter().notifyDataSetChanged();
这对我有用了。
答案 1 :(得分:-1)
我遇到了同样的问题,然后我找到了一个临时解决方案,而不是使用notifyDataSetChanged()
使用
recyclerView.setAdapter(adapter);
recyclerView.scrollToPosition(postion);