0

Retrofit으로 작업하기 시작했습니다. 내 응용 프로그램에서 내가 유형 오는 로그에 내 모델에서 데이터를 얻을려고 두 ViewHolder 년대, 한 RecyclerView이 : 내 RecyclerView이 유형을 표시 할 수있는 방법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); 
    } 

을 경우에게있을 것입니다 몇 가지 유형?

9월 9일에서 13일까지 : 20 : 지금 난 다음 메시지가 40.958 2798년부터 2798년까지/com.random.secondproject E/RecyclerView : 없음 어댑터가 연결되지; 레이아웃 건너 뛰는

데이터 어댑터 :

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

당신은 내가 두 가지 유형 (텍스트 뷰와 글고) 그래서 (배열 내 생각) 모델에 몇 가지 방법을 쓸 것을거야 볼 수 있듯이 . 예를 들어 Log.d에 썼습니다.

+0

** onResponse **가 호출되기 전에이 메시지가 표시된다고 가정합니다. –

+0

네, 필요한 경우 MainActivity에 모든 코드를 표시 할 수 있습니다. 문제를 이해하고 싶습니다. – Morozov

+1

log.d는 인쇄 값 유형 및 제목입니다. 질문을 편집하여 DataAdapter 코드를 추가 할 수 있습니까 –

답변

0

귀하의 어댑터에는 모든 것이 정상적으로 보입니다. recyclerView.invalidate()으로 문의하십시오. 이 아이디어는 onResponse 메서드를 호출하기 전에 RecyclerView를 그립니다. 따라서 빈보기가 있습니다. invalidate() 메서드는보기를 다시 그리십시오.

+0

같은 문제가 발생했습니다. 문제는 RecyclerView에서 올바른 데이터가 출력되는지 확신 할 수 없다는 것입니다. – Morozov

0

onResponse 함수가 호출되지 않거나, onResponse가 호출되기 전에 recyclerview의 요소를 사용하면 오류가 발생합니다.

당신은하지 setAdapter 다시 onResponse 어댑터 당신에게 단지 notifyDatasetChange라고하면 빈 드롭 다운

adapter = new DataAdapter(new Dropdown()); 

와 어댑터를 만들 필요가있다.

또는 recyclerview의 요소와 일치하는 코드를 onResponse에 넣습니다.

+0

그러나 로그 대신 목록에서 통화를 변경하려면 어떻게해야합니까? – Morozov

+0

질문을 이해할 수 없습니다. 나는 당신의 Dropdown 클래스에 대해 모른다. 전역 변수를 만들 수 있습니다 : mDropdown = new Dropdown(), onResponse 다음에 mDropdown.clear로 mDropdown을 지운 다음 mDropdown.add (response.body())를 추가합니다. – phongvan