【发布时间】:2015-05-02 16:33:33
【问题描述】:
我创建了一个简单的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();
}
}
适配器:
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);
}
}
}
我使用Interface,通过一个活动从另一个Fragment (DialogFragment) 调用refreshAdapter 方法。我使用了调试器,所以我知道调用了refreshAdapter 方法。它只是对显示的 RecyclerView 没有影响。当我离开PastEventFragment然后切换回它,这样onCreateView方法被调用时,所有之前添加的项目都会显示出来,所以ORM没有问题。
【问题讨论】:
标签: android android-fragments android-adapter android-recyclerview