如何在Android上的RecyclerView中设置数据

时间:2017-05-22 04:29:56

标签: android android-recyclerview android-adapter

我想从服务器获取一些数据并将其显示在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);
                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);
        }
    }
}

我该如何解决?请帮我。 我该怎么办?请帮帮我

1 个答案:

答案 0 :(得分:0)

那么试试这个,你没有在成功响应中初始化适配器对象。 添加此mAdapter = new CountryAdapter(models,getActivity(),listener);

@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,getActivity(),listener);
                countryRecycler.setAdapter(mAdapter);
            }
        } catch (Exception e) {
        }
    }