2017-03-15 16 views
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); 
     } 
    } 
} 
+0

recyclerview宣言のコードを追加してアダプタを設定してください –

+0

ビューにアタッチしているかどうかを確認するために、対照的な色を行に設定してみてください。 Log String.valueOf(((OximeterSensor)item).getPulse())null/emptyを確認する また、アダプタに渡すコンテキストはどこでも使用されていません - 削除してください –

+0

doInBackgroundで 'return null'を削除してください、それは無効です、それは任意の値を返すことはできません。 'measurements'変数がインスタンス化される場所はどこですか?おそらくすべてのコードをコピーしていないでしょう。 – miljon

答えて

1

私は同じ問題が 'wrap_content' から 'match_parent' からlayout_heightを変更しました。

+0

それは働いて、ありがとう! – user1852879

関連する問題