我正在尝试使用RecyclerView显示项目列表。问题是布局仅显示来自List<BaseSensor> measurements
的第一个元素。
我的适配器:
public class MeasurementsAdapter extends RecyclerView.Adapter<RecyclerView.ViewHolder> {
private List<BaseSensor> measurements;
private Context context;
public MeasurementsAdapter(Context context, List<BaseSensor> measurements) {
this.context = context;
this.measurements = measurements;
}
@Override
public RecyclerView.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
if (viewType == BaseSensor.DEVICE_TYPE_OXIMETER) {
View rootView = LayoutInflater.from(parent.getContext()).inflate(R.layout.oximeter_list_item, parent, false);
return new OximeterView(rootView);
}
throw new RuntimeException("there is no type that matches the type " + viewType + " + make sure your using types correctly");
}
@Override
public void onBindViewHolder(RecyclerView.ViewHolder viewHolder, int position) {
final BaseSensor item = measurements.get(position);
if (viewHolder instanceof OximeterView) {
OximeterView holder = (OximeterView) viewHolder;
holder.tvPulse.setText(String.valueOf(((OximeterSensor)item).getPulse()));
}
}
@Override
public int getItemCount() {
return measurements.size();
}
@Override
public int getItemViewType(int position) {
return BaseSensor.DEVICE_TYPE_OXIMETER;
}
public static class OximeterView extends RecyclerView.ViewHolder {
private TextView tvPulse;
public OximeterView(View rootView) {
super(rootView);
tvPulse = (TextView) rootView.findViewById(R.id.tvPulse);
}
}
}
onBindViewHolder
方法被调用十二次,对于测量列表的每个元素一次,但是tvPulse
仅显示一次,具有我列表中第一个元素的值。
编辑:
public class MeasurementsFragment extends BaseFragment {
private RecyclerView rvMeasurements;
private List<BaseSensor> measurements;
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
View rootView = inflater.inflate(R.layout.fragment_measurements, container, false);
rvMeasurements = (RecyclerView) rootView.findViewById(R.id.rvMeasurements);
rvMeasurements.setLayoutManager(new LinearLayoutManager(getActivity()));
MeasurementsAT measurementsAT = new MeasurementsAT();
measurementsAT.execute();
return rootView;
}
private class MeasurementsAT extends AsyncTask<Void, Void, Void> {
@Override
protected Void doInBackground(Void... params) {
DatabaseManager.createInstance(getActivity());
measurements = DatabaseManager.getInstance().getAllMeasurements();
return null;
}
@Override
protected void onPostExecute(Void bitmap) {
MeasurementsAdapter adapter = new MeasurementsAdapter(getActivity(), measurements);
rvMeasurements.setAdapter(adapter);
}
}
}
答案 0 :(得分:1)
我从&#39; match_parent &#39; match_parent &#39;更改了 layout_height 到&#39; wrap_content &#39;。