Android notifyDataSetChanged()不';无法使用自定义适配器

Android notifyDataSetChanged()不';无法使用自定义适配器,android,android-fragments,android-adapter,android-recyclerview,Android,Android Fragments,Android Adapter,Android Recyclerview,我创建了一个简单的RecyclerView.Adapter,它正确地显示了内容,但是当我在上面调用notifyDataSetChanged()时,它就不起作用了 PastEventFragment public class PastEventFragment extends Fragment { private RecyclerView mRecyclerView; private List<PastEventItem> mPastEventItemList;

我创建了一个简单的
RecyclerView.Adapter
,它正确地显示了内容,但是当我在上面调用
notifyDataSetChanged()
时,它就不起作用了

PastEventFragment

public class PastEventFragment extends Fragment {
    private RecyclerView mRecyclerView;
    private List<PastEventItem> mPastEventItemList;
    private PastEventAdapter mPastEventAdapter;

    public PastEventFragment() {

    }

    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
        super.onCreateView(inflater, container, savedInstanceState);
        View pastEvent = inflater.inflate(R.layout.fragment_past_event, container, false);
        mRecyclerView = (RecyclerView) pastEvent.findViewById(R.id.pe_rv);
        mRecyclerView.setLayoutManager(new LinearLayoutManager(getActivity()));
        mPastEventItemList = PastEventItem.listAll(PastEventItem.class);
        mPastEventAdapter = new PastEventAdapter(mPastEventItemList, getActivity());
        mRecyclerView.setAdapter(mPastEventAdapter);

        return pastEvent;
    }

    public void refreshAdapter() {
        mPastEventItemList.clear();
        mPastEventItemList = PastEventItem.listAll(PastEventItem.class);
        mPastEventAdapter.notifyDataSetChanged();
    }



}
公共类PastEventFragment扩展片段{
私人回收视图mRecyclerView;
私有列表MPaStevenItemList;
私人PastEventAdapter MPaStevenAdapter;
公共PastEventFragment(){
}
@凌驾
CreateView上的公共视图(布局、充气机、视图组容器、捆绑包保存状态){
super.onCreateView(充气机、容器、保存状态);
View pastEvent=充气机。充气(R.layout.fragment\u pass\u事件,容器,false);
mRecyclerView=(RecyclerView)pastEvent.findviewbyd(R.id.pe_rv);
setLayoutManager(新的LinearLayoutManager(getActivity());
mPastEventItemList=PastEventItem.listAll(PastEventItem.class);
mpasteventapter=new-pasteventapter(mPastEventItemList,getActivity());
mRecyclerView.setAdapter(MPaStevenAdapter);
回风口;
}
公共空刷新适配器(){
mPastEventItemList.clear();
mPastEventItemList=PastEventItem.listAll(PastEventItem.class);
mpasteventapter.notifyDataSetChanged();
}
}
适配器:

public class PastEventAdapter extends RecyclerView.Adapter<PastEventAdapter.PastEventHolder> {

    private List<PastEventItem> pastEventItemList;
    private Context mContext;

    public PastEventAdapter(List<PastEventItem> pastEventItemList, Context context) {
        this.pastEventItemList = pastEventItemList;
        this.mContext = context;
    }


    @Override
    public int getItemCount() {
        return pastEventItemList.size();
    }

    @Override
    public void onBindViewHolder(PastEventHolder pastEventHolder, int i) {
        PastEventItem pei = pastEventItemList.get(i);
        switch (pei.type) {
            case 1:
                pastEventHolder.type.setText(mContext.getResources().getString(R.string.string1));
                break;
            case 2:
                pastEventHolder.type.setText(mContext.getResources().getString(R.string.string2));
                break;
            case 3:
                pastEventHolder.type.setText(mContext.getResources().getString(R.string.string3));
                break;
            case 4:
                pastEventHolder.type.setText(mContext.getResources().getString(R.string.string4));
                break;
        }

        pastEventHolder.ml.setText(Integer.toString(pei.ml));
        pastEventHolder.per.setText(Integer.toString(pei.per));
    }

    @Override
    public PastEventHolder onCreateViewHolder(ViewGroup viewGroup, int i) {
        View itemView = LayoutInflater.
                from(viewGroup.getContext()).
                inflate(R.layout.past_event_item, viewGroup, false);

        return new PastEventHolder(itemView);
    }


    public static class PastEventHolder extends RecyclerView.ViewHolder {
        private TextView type;
        private TextView ml;
        private TextView per;

        public PastEventHolder(View v) {
            super(v);
            type = (TextView) v.findViewById(R.id.pe_type);
            ml = (TextView) v.findViewById(R.id.pe_ml);
            per = (TextView) v.findViewById(R.id.pe_per);
        }
    }
}
公共类PastEventAdapter扩展了RecyclerView.Adapter{
私人名单;
私有上下文;
公共PastEventAdapter(列表pastEventItemList,上下文){
this.pastEventItemList=pastEventItemList;
this.mContext=上下文;
}
@凌驾
public int getItemCount(){
返回pastEventItemList.size();
}
@凌驾
BindViewHolder上的公共void(PastEventHolder PastEventHolder,int i){
PastEventItem pei=pastEventItemList.get(i);
开关(pei型){
案例1:
pastEventHolder.type.setText(mContext.getResources().getString(R.string.string1));
打破
案例2:
pastEventHolder.type.setText(mContext.getResources().getString(R.string.string2));
打破
案例3:
pastEventHolder.type.setText(mContext.getResources().getString(R.string.string3));
打破
案例4:
pastEventHolder.type.setText(mContext.getResources().getString(R.string.string4));
打破
}
pastEventHolder.ml.setText(Integer.toString(pei.ml));
pastEventHolder.per.setText(Integer.toString(pei.per));
}
@凌驾
public PastEventHolder onCreateViewHolder(视图组视图组,int i){
视图项视图=布局调整器。
来自(viewGroup.getContext())。
充气(R.layout.pass\u event\u item,viewGroup,false);
返回新的PastEventHolder(itemView);
}
公共静态类PastEventHolder扩展了RecyclerView.ViewHolder{
私有文本视图类型;
私有文本视图ml;
私密文本浏览;
公共粘贴文件夹(视图v){
超级(五);
type=(TextView)v.findViewById(R.id.pe_type);
ml=(TextView)v.findViewById(R.id.pe_ml);
per=(文本视图)v.findviewbyd(R.id.pe_per);
}
}
}

我使用
接口
,通过活动从另一个
片段(
对话框片段
)调用
刷新适配器
方法。我使用了调试器,因此我知道调用了
refreshAdapter
方法。它只是对显示的RecyclerView没有影响。当我离开
PastEventFragment
然后切换回它,以便调用
onCreateView
方法时,会显示以前添加的所有项,因此ORM没有问题

尝试在适配器中添加
setItemList()
方法。并使用此方法对适配器设置更新的列表数据,然后调用notifyDatasetChange方法

您的适配器引用了
mPastEventItemList
。但是,您正在这一行代码中创建一个新列表(新引用):

mPastEventItemList = PastEventItem.listAll(PastEventItem.class);
但是您的适配器仍然连接到
mpasventitemlist
的旧引用

因此,你应该这样做:

 public void refreshAdapter() {
        mPastEventItemList.clear();
        mPastEventItemList.addAll(PastEventItem.listAll(PastEventItem.class));
        mPastEventAdapter.notifyDataSetChanged();
    }