【发布时间】:2019-01-17 17:46:25
【问题描述】:
我正在尝试使用 notifyDataSetChanged() 更新 recyclerview,但 recyclerview 没有得到更新,我知道在堆栈溢出时有很多类似的问题被问及我尝试了其中的大部分,但在我的情况下似乎没有任何效果;
当数据第一次进入片段时,我正在为适配器创建一个对象并将其设置为运行良好的 recyclerview,但是下次当适配器已经初始化时,我试图通知适配器,它给了我一个即使提供的列表不为空,也可以清空 recyclerview。
请提出建议。
回收站查看代码
private void showStateList(List<State> states) {
if (states != null) {
this.lstStates = states;
if(stateAdapter == null){
LinearLayoutManager linearLayoutManager = new LinearLayoutManager(getActivity());
linearLayoutManager.setOrientation(LinearLayoutManager.VERTICAL);
stateFragmentBinding.stateRecyclerView.setLayoutManager(linearLayoutManager);
stateFragmentBinding.stateRecyclerView.addItemDecoration(new DividerItemDecoration(stateFragmentBinding.stateRecyclerView.getContext(),
linearLayoutManager.getOrientation()));
stateFragmentBinding.stateRecyclerView.setHasFixedSize(true);
stateAdapter = new StateAdapter(lstStates, this);
stateFragmentBinding.stateRecyclerView.setAdapter(stateAdapter);
}
else{
stateAdapter.notifyDataSetChanged(lstStates);
}
}
}
适配器代码:
class StateAdapter extends RecyclerView.Adapter<StateViewHolder> {
private LayoutInflater inflater;
private StateClickListener stateClickListener;
private List<State> lstStateItem;
public StateAdapter(List<State> lstStateItem, StateClickListener stateClickListener) {
this.lstStateItem = lstStateItem;
this.stateClickListener = stateClickListener;
}
@NonNull
@Override
public StateViewHolder onCreateViewHolder(@NonNull ViewGroup viewGroup, int position) {
if (inflater == null)
inflater = LayoutInflater.from(viewGroup.getContext());
StateAdapterBinding stateAdapterBinding = StateAdapterBinding.inflate(inflater, viewGroup, false);
return new StateViewHolder(stateAdapterBinding, stateClickListener);
}
@Override
public void onBindViewHolder(@NonNull StateViewHolder stateViewHolder, int position) {
State state = lstStateItem.get(position);
stateViewHolder.bind(state, position);
}
@Override
public int getItemCount() {
return lstStateItem.size();
}
public void notifyDataSetChanged(List<State> states) {
List<State> tempList = new ArrayList<>(states);
lstStateItem.clear();
lstStateItem.addAll(tempList);
this.notifyDataSetChanged();
}
}
ViewHolder 类
class StateViewHolder extends RecyclerView.ViewHolder {
private StateAdapterBinding stateAdapterBinding;
private StateClickListener stateClickListener;
StateViewHolder(StateAdapterBinding stateAdapterBinding, StateClickListener stateClickListener) {
super(stateAdapterBinding.getRoot());
this.stateAdapterBinding = stateAdapterBinding;
this.stateClickListener = stateClickListener;
}
public void bind(State state, int position) {
stateAdapterBinding.executePendingBindings();
stateAdapterBinding.setStateModel(state);
stateAdapterBinding.setStateHandler(stateClickListener);
stateAdapterBinding.getRoot().setTag(R.id.lnrHome, position);
stateAdapterBinding.getRoot().setTag(state);
}
【问题讨论】:
-
发布适配器的完整代码。
-
问题不完整..发布您的适配器代码...
-
发布了完整的适配器代码@Kannan_SJD
-
发布了完整的适配器代码@DeepPatel
-
@Praneshsaw :检查我的答案并尝试一下
标签: android android-recyclerview