0
RecyclerViewを使用してアイテムのリストを表示しようとしています。問題は、レイアウトがList<BaseSensor> measurements
の最初の要素に対してのみ表示されることです。RecyclerView.Adapterは一度だけレイアウトを表示します
マイアダプタ:
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
は私のリストの最初の要素の値を一度だけ表示されている計測値リストの各要素のために、12回と呼ばれています。
EDIT:
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);
}
}
}
recyclerview宣言のコードを追加してアダプタを設定してください –
ビューにアタッチしているかどうかを確認するために、対照的な色を行に設定してみてください。 Log String.valueOf(((OximeterSensor)item).getPulse())null/emptyを確認する また、アダプタに渡すコンテキストはどこでも使用されていません - 削除してください –
doInBackgroundで 'return null'を削除してください、それは無効です、それは任意の値を返すことはできません。 'measurements'変数がインスタンス化される場所はどこですか?おそらくすべてのコードをコピーしていないでしょう。 – miljon