notigyDataSetChanged ne fonctionne pas! La liste dans l'adaptateur est toujours vide après la méthode notifyDataSetChanged.RecyclerView notifyDataSetChanged ne fonctionne pas, la liste dans l'adaptateur est toujours vide après la méthode notifyDataSetChanged
MainActivity:
//left menu
mRvLeftMenu = (RecyclerView) mSlidingMenu.findViewById(R.id.rv_left_menu);
//set layout manager
mRvLeftMenu.setLayoutManager(new LinearLayoutManager(this));
//init list
mSlidingData = new ArrayList<>();
mLeftMenuAdapter = new LeftMenuAdapter(this, mSlidingData);
//set adapter
mRvLeftMenu.setAdapter(mLeftMenuAdapter);
@Override
public void onLoadFinished(int requestType, BaseResultBean resultBean) {
switch (requestType) {
case MyConstants.REQUEST_RESULT_NEWS_CENTER:
List<NewsResultBean.DataBean> list = ((NewsResultBean) resultBean).getData();
fonctionne bien comme ça
// mLeftMenuAdapter = new LeftMenuAdapter(this, list);
// mRvLeftMenu.setAdapter(mLeftMenuAdapter);
si je viens d'ajouter les données à l'mSlidingData il n'a pas fonctionné, RecyclerView ne rafraîchir! Pourquoi? Après l'appel de notifyDataSetChanged, mList in Adapter est toujours vide! Même que ci-dessous.
mRvLeftMenu.getAdapter().notifyDataSetChanged();
break;
}
}
Adaptateur:
public class LeftMenuAdapter extends RecyclerView.Adapter<LeftMenuAdapter.VH> {
private List<NewsResultBean.DataBean> mList;
private Context mContext;
private OnItemClickListener mOnItemClickListener;
public LeftMenuAdapter(Context context, List<NewsResultBean.DataBean> list) {
mList = list;
mContext = context;
}
@Override
public VH onCreateViewHolder(ViewGroup parent, int viewType) {
View view = View.inflate(mContext, R.layout.item_left_menu, null);
return new VH(view);
}
@Override
public void onBindViewHolder(final VH holder, int position) {
holder.mTvLeftMenu.setText(mList.get(position).getTitle());
final int tempPosition = position;
holder.mView.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
if (mOnItemClickListener != null){
mOnItemClickListener.onItemClicked(v,tempPosition);
}
}
});
}
@Override
public int getItemCount() {
return mList.size();
}
class VH extends RecyclerView.ViewHolder {
@BindView(R.id.tv_left_menu)
TextView mTvLeftMenu;
View mView;
public VH(View itemView) {
super(itemView);
mView = itemView;
ButterKnife.bind(this,mView);
}
}
interface OnItemClickListener{
void onItemClicked(View view,int position);
}
public void setOnItemClickListener(OnItemClickListener onItemClickListener) {
mOnItemClickListener = onItemClickListener;
}
}
Vous passez le vide arraylist 'mSlidingData' au contructor adaptateur. Ce qui n'est jamais changé. Vous devez ajouter les éléments avant d'appeler la classe d'adaptateur. –
Modifiez-vous la valeur de mSlidingData quelque part dans votre activité? – algrid
Oui, j'ai vérifié à nouveau mon code, j'ai changé la valeur de mSlidingData après une demande de réseau. –