0

Я начал работать с Retrofit. В моем приложении у меня есть один RecyclerView с двумя ViewHolder, где пытаются получить данные из моих моделей, в журналах приходя типа:Получить данные в моем 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, если будет несколько типов? Теперь я получаю следующее сообщение:

09-13 09: 20: 40,958 2798-2798/com.random.secondproject E/RecyclerView: адаптер не прилагается; пропуская макет

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); 
    } 

Как вы можете видеть, я собираюсь взять два типа (TextView и EditText) поэтому я буду писать несколько способов модели (массив я думаю) , Например, как я писал в Log.d.

+0

Я предполагаю, что вы получили это сообщение до того, как вызывается ** onResponse **, правильно? –

+0

Да, я могу показать весь свой код в MainActivity, если это необходимо. Хотите понять проблему. – Morozov

+1

Предполагая, что log.d печатает тип и заголовок значения. Пожалуйста, можете добавить код DataAdapter, отредактировав вопрос –

ответ

0

Все выглядит нормально в вашем адаптере. Попробуйте позвонить recyclerView.invalidate(). Идея состоит в том, что вы рисуете RecyclerView перед вызовом метода onResponse. Таким образом, у вас пустой вид. Метод invalidate() попытается перерисовать представление.

+0

Такая же проблема. Проблема в том, что я не уверен, что правильный вывод данных в RecyclerView. – Morozov

0

Есть некоторая ошибка, так что функция onResponse не вызывает вызов, или вы делаете элемент в recyclerview до вызова onResponse.

Вам нужно создать адаптер с пустым раскрывающийся

adapter = new DataAdapter(new Dropdown()); 

Когда onResponse назвал вас только notifyDatasetChange к адаптеру, не setAdapter снова.

Или вы поместили код, который использует элемент recyclerview для onResponse.

+0

Но как я могу изменить вызов в списке вместо журналов? – Morozov

+0

Я не понимаю ваш вопрос. Я не знаю о вашем классе Dropdown. Вы можете создать глобальную переменную: mDropdown = new Dropdown(), а затем, после того, как onResponse вызовет очистку mDropdown с помощью mDropdown.clear, добавьте новое значение: mDropdown.add (response.body()). – phongvan

Смежные вопросы