RecyclerView.Adapter仅显示一次布局

时间:2017-03-15 09:33:34

标签: android android-recyclerview android-adapter

我正在尝试使用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);
        }
    }
}

1 个答案:

答案 0 :(得分:1)

我从&#39; match_parent &#39; match_parent &#39;更改了 layout_height 到&#39; wrap_content &#39;。