NotifyDataSetChanged RecyclerView 根本不工作
NotifyDataSetChanged RecyclerView not working at all
我正在使用 RecyclerView
来显示从 Web 服务解析后检索到的数据。问题是 notifydatasetchanged
根本不起作用。为了解决这个问题,我再次设置适配器。
我在使用此技术时遇到两个问题:
再次设置新适配器时屏幕闪烁。
回收站视图也指向回收站视图的第一项。 (我只想在现有 list.Array 列表大小更新的末尾追加新数据。但唯一的问题是,列表是从第零位置开始的。)
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
View view = inflater.inflate(R.layout.fragment_book_mag_list_child, container, false);
recyclerView = (RecyclerView) view.findViewById(R.id.bookMagRecyclerViewList);
bookMagDataList = new ArrayList<>();
adapter = new BookMagListRecyclerViewAdapter(getActivity(), bookMagDataList);
recyclerView.setAdapter(adapter);
LinearLayoutManager linearLayoutManager = new LinearLayoutManager(getActivity());
//linearLayoutManager.setStackFromEnd(true);
recyclerView.setLayoutManager(linearLayoutManager);
recyclerView.setOnScrollListener(new EndlessRecyclerScrollListener(linearLayoutManager) {
@Override
public void onLoadMore(int current_page) {
Log.d("Do Something", "Do Something" + current_page);
params.setStart("" + current_page);
dataModel.init(params);
}
});
return view;
}
@Override
public void update() {
if (dataModel.getFragmentData(subScreenId) != null) {
bookMagDataList = dataModel.getFragmentData(subScreenId);
Log.d("MyDataListSize: ", "" + bookMagDataList.size());
adapter = new BookMagListRecyclerViewAdapter(getActivity(), bookMagDataList);
recyclerView.setAdapter(adapter);
}
}
请检查问题是什么,如果可以解决请告诉我。
你必须像下面的 update
方法那样做,
if(adapter == null){
adapter = new BookMagListRecyclerViewAdapter(getActivity(), bookMagDataList);
recyclerView.setAdapter(adapter);
}else{
myAdapter.notifyDataSetChanged();
}
问题出在您的更新功能上。每次更新时,您都会用新实例覆盖 bookMagDataList 列表。您应该使用 .addAll() 函数来添加新元素。然后调用 adapter.notifyDataSetChanged() 。进行如下更改。
@Override
public void update() {
if (dataModel.getFragmentData(subScreenId) != null) {
bookMagDataList.addAll(dataModel.getFragmentData(subScreenId));
Log.d("MyDataListSize: ", "" + bookMagDataList.size());
adapter.notifyDataSetChanged();
}
}
由于您没有发布您的适配器代码,您必须使用 styx 方法:
@Override
public void update() {
if (dataModel.getFragmentData(subScreenId) != null) {
bookMagDataList.addAll(dataModel.getFragmentData(subScreenId));
Log.d("MyDataListSize: ", "" + bookMagDataList.size());
adapter.notifyDataSetChanged();
}
}
答案由 styx 给出,因此归功于他
不要再次实例化适配器,只需要在 arrayList 中添加新数据然后调用 notifyDatasetChanged()
喜欢--
bookMagDataList.add("YOUR ITEM");
adpter.notifyDatasetChanged();
我的解决方案如下
if (adapter == null) {
adapter = new BookMagListRecyclerViewAdapter(getActivity(), bookMagDataList);
recyclerView.setAdapter(adapter);
} else {
adapter.bookMagDataList.clear();
adapter.bookMagDataList = bookMagDataList;
myAdapter.notifyDataSetChanged()
}
我正在使用 RecyclerView
来显示从 Web 服务解析后检索到的数据。问题是 notifydatasetchanged
根本不起作用。为了解决这个问题,我再次设置适配器。
我在使用此技术时遇到两个问题:
再次设置新适配器时屏幕闪烁。
回收站视图也指向回收站视图的第一项。 (我只想在现有 list.Array 列表大小更新的末尾追加新数据。但唯一的问题是,列表是从第零位置开始的。)
@Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { View view = inflater.inflate(R.layout.fragment_book_mag_list_child, container, false); recyclerView = (RecyclerView) view.findViewById(R.id.bookMagRecyclerViewList); bookMagDataList = new ArrayList<>(); adapter = new BookMagListRecyclerViewAdapter(getActivity(), bookMagDataList); recyclerView.setAdapter(adapter); LinearLayoutManager linearLayoutManager = new LinearLayoutManager(getActivity()); //linearLayoutManager.setStackFromEnd(true); recyclerView.setLayoutManager(linearLayoutManager); recyclerView.setOnScrollListener(new EndlessRecyclerScrollListener(linearLayoutManager) { @Override public void onLoadMore(int current_page) { Log.d("Do Something", "Do Something" + current_page); params.setStart("" + current_page); dataModel.init(params); } }); return view; } @Override public void update() { if (dataModel.getFragmentData(subScreenId) != null) { bookMagDataList = dataModel.getFragmentData(subScreenId); Log.d("MyDataListSize: ", "" + bookMagDataList.size()); adapter = new BookMagListRecyclerViewAdapter(getActivity(), bookMagDataList); recyclerView.setAdapter(adapter); } }
请检查问题是什么,如果可以解决请告诉我。
你必须像下面的 update
方法那样做,
if(adapter == null){
adapter = new BookMagListRecyclerViewAdapter(getActivity(), bookMagDataList);
recyclerView.setAdapter(adapter);
}else{
myAdapter.notifyDataSetChanged();
}
问题出在您的更新功能上。每次更新时,您都会用新实例覆盖 bookMagDataList 列表。您应该使用 .addAll() 函数来添加新元素。然后调用 adapter.notifyDataSetChanged() 。进行如下更改。
@Override
public void update() {
if (dataModel.getFragmentData(subScreenId) != null) {
bookMagDataList.addAll(dataModel.getFragmentData(subScreenId));
Log.d("MyDataListSize: ", "" + bookMagDataList.size());
adapter.notifyDataSetChanged();
}
}
由于您没有发布您的适配器代码,您必须使用 styx 方法:
@Override
public void update() {
if (dataModel.getFragmentData(subScreenId) != null) {
bookMagDataList.addAll(dataModel.getFragmentData(subScreenId));
Log.d("MyDataListSize: ", "" + bookMagDataList.size());
adapter.notifyDataSetChanged();
}
}
答案由 styx 给出,因此归功于他
不要再次实例化适配器,只需要在 arrayList 中添加新数据然后调用 notifyDatasetChanged()
喜欢--
bookMagDataList.add("YOUR ITEM");
adpter.notifyDatasetChanged();
我的解决方案如下
if (adapter == null) {
adapter = new BookMagListRecyclerViewAdapter(getActivity(), bookMagDataList);
recyclerView.setAdapter(adapter);
} else {
adapter.bookMagDataList.clear();
adapter.bookMagDataList = bookMagDataList;
myAdapter.notifyDataSetChanged()
}