2017-09-07 2 views
1

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; 
    } 
} 
+0

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. –

+0

Modifiez-vous la valeur de mSlidingData quelque part dans votre activité? – algrid

+0

Oui, j'ai vérifié à nouveau mon code, j'ai changé la valeur de mSlidingData après une demande de réseau. –

Répondre

0

thx pour votre aide les gars! J'ai fait une erreur stupide, j'ai changé mSlidingData à une autre liste après une demande de réseau.

//after network request 
private void processResult(String response) { 
    Gson gson = new Gson(); 
    NewsResultBean newsResultBean = gson.fromJson(response, NewsResultBean 
      .class); 
    Log.d(TAG, "onResponse: " + newsResultBean.toString()); 
    //pass the result data to MainActivity,changed the mSlidingData to a new list, 
    //cause RecyclerView notifyDataSetChanged method not work! 
//      mActivity.setSlidingData(newsResultBean.getData()); 

méthode setSlidingData comme ceci:

public void setSlidingData(List<NewsResultBean.DataBean> slidingData) { 
    mSlidingData = slidingData; 
} 
+0

Ça arrive au meilleur de nous. Continue de travailler :) –