0

私はRetrofitで作業を始めました。RecyclerViewでデータを取得

@Override 
    public void onResponse(Call<DropDown> call, Response<DropDown> response) { 
     DropDown jsonResponse = response.body(); 
     Log.d("type",jsonResponse.getForm().getmGroupss().get(1).getmControls().get(2).getTitle()+""); 
     adapter = new DataAdapter(response.body()); 
     recyclerView.setAdapter(adapter); 
    } 

があるだろう場合はどのように私は、私のRecyclerViewこのタイプを表示することができます。私のアプリケーションでは、私はログに、私のモデルからデータを取得しようとタイプ来るところ、2 ViewHolderさんと1 RecyclerViewを持っていますいくつかのタイプ?

9月13日09:20:40.958 2798年から2798年/ E/RecyclerView com.random.secondproject: は今、私は次のメッセージを取得ノーアダプタ付属し;レイアウトをスキップ

のDataAdapter:

public class DataAdapter extends RecyclerView.Adapter<RecyclerView.ViewHolder> { 

public static final String TYPE_TEXTVIEW = "0"; 
public static final String TYPE_EDITVIEW = "1"; 
private DropDown mList; 

public DataAdapter(DropDown list) { 
    this.mList = list; 
} 

@Override 
public RecyclerView.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) { 
    View view; 
    switch (viewType) { 
     case 0: 
      view = LayoutInflater.from(parent.getContext()).inflate(R.layout.text_numeric, parent, false); 
      return new NumericViewHolder(view); 
     case 1: 
      view = LayoutInflater.from(parent.getContext()).inflate(R.layout.drop_down_options, parent, false); 
      return new DropDownViewHolder(view); 
    } 
    return null; 
} 

@Override 
public void onBindViewHolder(RecyclerView.ViewHolder holder, int position) { 
    DropDown object = mList.get(position); 
    if (object != null) { 
     switch (object.getTitle()){ 
      case TYPE_TEXTVIEW: 
       ((NumericViewHolder) holder).title.setText(String.valueOf(object.getTitle())); 
       break; 
      case TYPE_EDITVIEW: 
       ((DropDownViewHolder) holder).title_options.setText(String.valueOf(object.getTitle())); 
       break; 
     } 
    } 
} 

@Override 
public int getItemCount() { 
    if (mList == null) 
     return 0; 
    return mList.size(); 
} 

@Override 
public int getItemViewType(int position) { 
    DropDown object = mList.get(position); 
     if (object.getTitle().equals("drop_down_options")) 
     return 0; 
    else return 1; 
} 

public class NumericViewHolder extends RecyclerView.ViewHolder { 

    private TextView title; 

    public NumericViewHolder(View itemView) { 
     super(itemView); 
     title = (TextView) itemView.findViewById(R.id.title); 
    } 
} 

public class DropDownViewHolder extends RecyclerView.ViewHolder { 

    private EditText title_options; 

    public DropDownViewHolder(View itemView) { 
     super(itemView); 
     title_options = (EditText) itemView.findViewById(R.id.title_options); 
    } 

あなたが見ることができるように、私はので、私は(私は思うのアレイ)をモデル化する方法をいくつか書きます2種類(のTextViewとのEditText) を取るつもりです。たとえば、私がLog.dに書いたように。

+0

** onResponse **が呼び出される前にそのメッセージが表示されると思いますが、そうですか? –

+0

はい、MainActivityにすべてのコードを表示することができます。 問題を理解したい。 – Morozov

+1

log.dが印刷値のタイプとタイトルであると仮定します。質問を編集してDataAdapterコードを追加できますか? –

答えて

0

アダプターですべてがわかります。 recyclerView.invalidate()に電話してください。この考え方は、onResponseメソッドを呼び出す前にRecyclerViewを描画するという考え方です。したがって、空のビューがあります。 invalidate()メソッドは、ビューを再描画しようとします。

+0

同じ問題です。 問題は、RecyclerViewのデータが正しく出力されているかわからないことです。 – Morozov

0

onResponse関数が呼び出されないか、またはonResponseが呼び出される前にrecyclerviewの要素を使用するようなエラーがあります。

あなたはonResponseのみnotifyDatasetChangeアダプタにあなたを呼ばれたら、再度ないsetAdapterを行う

adapter = new DataAdapter(new Dropdown()); 

空のドロップダウンでアダプタを作成する必要があります。

または、recyclerviewの要素で特定のコードをonResponseに置きます。

+0

しかし、ログではなくリストの呼び出しを変更するにはどうすればよいですか? – Morozov

+0

私はあなたの質問を理解していません。あなたのDropdownクラスについてはわかりません。グローバル変数を作成することができます:mDropdown = new Dropdown()、次にonResponseの後にmDropdown.clearでmDropdownをクリアしてから、新しい値mDropdown.add(response.body())を追加します。 – phongvan

関連する問題