2017-09-07 26 views
1

notigyDataSetChanged가 작동하지 않습니다! 어댑터의 목록은 notifyDataSetChanged 메소드 다음으로 여전히 비어 있습니다.RecyclerView notifyDataSetChanged가 작동하지 않습니다. 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(); 

작품도 같은이 난 그냥 mSlidingData에 데이터를 추가하는 경우가 작동하지 않았다

//    mLeftMenuAdapter = new LeftMenuAdapter(this, list); 
//    mRvLeftMenu.setAdapter(mLeftMenuAdapter); 

, RecyclerView가 새로 고쳐지지 것입니다! 왜?

  mSlidingData.addAll(list); 
      mLeftMenuAdapter.notifyDataSetChanged(); 

및 notifyDataSetChanged 호출 후에 어댑터의 mList는 여전히 비어 있습니다! 벨로우즈와 동일합니다.

  mRvLeftMenu.getAdapter().notifyDataSetChanged(); 
      break; 
    } 
} 

어댑터 : 당신의 도움의 동료에 대한

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

당신은 어댑터 생성자에 빈 ArrayList에'mSlidingData'을 전달하고 있습니다. 결코 바뀌지 않습니다. 어댑터 클래스를 호출하기 전에 항목을 추가해야합니다. –

+0

활동의 mSlidingData 값을 변경하고 있습니까? – algrid

+0

예, 코드를 다시 확인한 후 네트워크 요청 후 mSlidingData 값을 변경했습니다. –

답변

0

THX! 바보 같은 실수를 저질렀습니다. 네트워크 요청 후 mSlidingData를 다른 목록으로 변경했습니다. 이 같은

//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()); 

setSlidingData 방법 :

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

우리에게 최선을 다합니다. 계속 작업 :) –