2017-05-23 1 views
2

서버에서 데이터를 가져 와서 Recyclerview에 표시하고 싶습니다. 이 데이터를 표시 할 수 있지만이 데이터를 표시하지 않고 progressBar 만 표시하면됩니다.
이 데이터를 Log.e에 표시하고 을 신속하게으로 표시하지만이 데이터를 RecyclerView에 표시하지 않고 진행률을 표시하십시오.
내 뜻을 알고 아래 그림 참조하십시오
Click too see어떻게 안드로이드에서 어댑터로 데이터를 설정할 수 있습니까?

내 응답 코드 :

InterfaceApi api = ApiClient.getClient().create(InterfaceApi.class); 
Call<CountryResponse> call = api.getCountryList(); 

call.enqueue(new Callback<CountryResponse>() { 
    @Override 
    public void onResponse(Call<CountryResponse> call, Response<CountryResponse> response) { 
     try { 
      if (response.body() != null) { 
       models.clear(); 
       models.addAll(response.body().getData()); 
       for (int i = 0; i <= models.size(); i++) { 
        Log.e("CountryInfoTAG", response.body().getData().get(i).getId() + " : " + 
          response.body().getData().get(i).getName()); 
       } 

       countryProgress.setVisibility(View.GONE); 
       mAdapter = new CountryAdapter(models, context, listener); 
       countryRecycler.setAdapter(mAdapter); 
      } 
     } catch (Exception e) { 
     } 
    } 

    @Override 
    public void onFailure(Call<CountryResponse> call, Throwable t) { 
     Toasty.error(context, context.getResources().getString(R.string.failRequest), 
       Toast.LENGTH_LONG, true).show(); 
    } 
}); 

어댑터 코드 :

public class CountryAdapter extends RecyclerView.Adapter { 

    private List<CountryDatum> mData; 
    private Context context; 
    private sendDataListener listner; 

    public CountryAdapter(List<CountryDatum> mData, Context context, sendDataListener listner) { 
     this.mData = mData; 
     this.context = context; 
     this.listner = listner; 

    } 

    @Override 
    public RecyclerView.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) { 
     RecyclerView.ViewHolder vh; 
     View v = LayoutInflater.from(parent.getContext()).inflate(R.layout.row_country, parent, false); 
     vh = new DataViewHolder(v); 

     return vh; 
    } 

    @Override 
    public void onBindViewHolder(RecyclerView.ViewHolder holder, final int position) { 
     if (holder instanceof DataViewHolder) { 
      ((DataViewHolder) holder).countryListTxt.setText(mData.get(position).getName() + ""); 
      ((DataViewHolder) holder).countryListTxt.setOnClickListener(new View.OnClickListener() { 
       @Override 
       public void onClick(View view) { 
        listner.onSendIdName(mData.get(position).getId(), mData.get(position).getName()); 

        if (context instanceof RegisterActivity) { 
         ((RegisterActivity) context).dismissCountryDialog(); 
        } 
       } 
      }); 
     } 
    } 

    @Override 
    public int getItemCount() { 
     return mData.size(); 
    } 

    public void add(List<CountryDatum> models) { 
     mData.addAll(models); 
     notifyDataSetChanged(); 
    } 

    public void clear() { 
     mData.clear(); 
     notifyDataSetChanged(); 
    } 

    public class DataViewHolder extends RecyclerView.ViewHolder { 
     private TextView countryListTxt; 

     public DataViewHolder(View itemView) { 
      super(itemView); 

      countryListTxt = (TextView) itemView.findViewById(R.id.countryNameTxt); 
     } 
    } 
} 

어떻게 해결할 수 있습니까? 이

@Override 
    public void onBindViewHolder(RecyclerView.ViewHolder holder, final int position) { 

     holder.countryListTxt.setText(mData.get(position).getName() + ""); 
      holder.countryListTxt.setOnClickListener(new View.OnClickListener() { 
       @Override 
       public void onClick(View view) { 
        listner.onSendIdName(mData.get(position).getId(), 
         mData.get(position).getName()); 

        if (context instanceof RegisterActivity) { 
         ((RegisterActivity) context).dismissCountryDialog(); 
        } 
       } 
      }); 

    } 

을보십시오이

((DataViewHolder) holder) 

같은 캐스팅도의 성공 방법에 어댑터를 설정 한 후 모달를 인쇄하지 않는, 나를

+0

어떻게'response.body'를 객체에 캐스팅하지 않고 컴파일합니까? 'response.body(). getData() .get (i) .getName()' – Charlie

+0

Retrofit 2를 사용하고 있습니까? – Charlie

+0

@Charlie, 예, 내 친구, 도와 주실 수 있습니까? 나는 이것을 필요로한다 :( –

답변

1

보십시오 : 당신은 또한 방법 중 몇 가지를 변경해야합니다 여기에서

public class CountryAdapter extends RecyclerView.Adapter<DataViewHolder> { 
    // ... 
} 

: 그것은이 같은 클래스 정의하려고 해결하기 위해

if (holder instanceof DataViewHolder) 

귀하의 어댑터와 함께 :

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

private List<CountryDatum> mData; 
private Context context; 
private sendDataListener listner; 

public CountryAdapter(List<CountryDatum> mData, Context context, sendDataListener listner) { 
    this.mData = mData; 
    this.context = context; 
    this.listner = listner; 

} 

@Override 
public ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) { 
    View v = LayoutInflater.from(parent.getContext()).inflate(R.layout.row_country, parent, false); 

    return new ViewHolder(v); 
} 

@Override 
public void onBindViewHolder(RecyclerView.ViewHolder holder, final int position) { 
     holder.countryListTxt.setText(mData.get(position).getName() + ""); 
     holder.countryListTxt.setOnClickListener(new View.OnClickListener() { 
      @Override 
      public void onClick(View view) { 
       listner.onSendIdName(mData.get(position).getId(), mData.get(position).getName()); 

       if (context instanceof RegisterActivity) { 
        ((RegisterActivity) context).dismissCountryDialog(); 
       } 
      } 
     }); 
} 

@Override 
public int getItemCount() { 
    return mData.size(); 
} 

public void add(List<CountryDatum> models) { 
    mData.addAll(models); 
    notifyDataSetChanged(); 
} 

public void clear() { 
    mData.clear(); 
    notifyDataSetChanged(); 
} 

public class ViewHolder extends RecyclerView.ViewHolder { 
    public TextView countryListTxt; 

    public DataViewHolder(View itemView) { 
     super(itemView); 

     countryListTxt = (TextView) itemView.findViewById(R.id.countryNameTxt); 
    } 
} 

}

0

어댑터 클래스에 onBindView 방법을 업데이트하시기 바랍니다 도와주세요 활동 클래스의 Wep API 콜백

0

onCreateViewHolder에서 반환하는 객체 vh은로 정의됩니다..

RecyclerView.ViewHolder vh; 
View v = // ... 
vh = new DataViewHolder(v); 
return vh; 

따라서 onBindViewHolder에 다음 문이 false를 반환 할 수 있습니다 (이것은 디버거를 확인하는 가치가있을 것입니다). 대체

@Override 
public DataViewHolder onCreateViewHolder(ViewGroup parent, int viewType) { 
    View v = LayoutInflater.from(parent.getContext()).inflate(R.layout.row_country, parent, false); 
    return new DataViewHolder(v); 
} 

@Override 
public void onBindViewHolder(DataViewHolder holder, final int position) { 
    holder.countryListTxt.setText(mData.get(position).getName() + ""); 
    holder.countryListTxt.setOnClickListener(new View.OnClickListener() { 
      @Override 
      public void onClick(View view) { 
       listner.onSendIdName(mData.get(position).getId(), mData.get(position).getName()); 

       if (context instanceof RegisterActivity) { 
        ((RegisterActivity) context).dismissCountryDialog(); 
       } 
      } 
     }); 
    } 
} 
+0

에 보낼 수 있습니까? 코드를 사용하여 어댑터의 전체 코드를 보내 줄 수 있습니까? 내 형제를하시기 바랍니다 : –

+0

여기 있습니까? 나를 도울 수 있습니까? 내 친구를 기쁘게하십시오 –

+0

죄송합니다, 지금까지 보지 못했습니다. 고쳤다? – Charlie

관련 문제