我想从服务器获取一些数据并将其显示到Recyclerview中。我可以显示此数据,但有一段时间不显示此数据,而仅显示progressBar。
我在Log.e中显示此数据并快速显示,但不在RecyclerView中显示此数据,而仅显示Progress。
请看下图知道我的意思:
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);
        }
    }
}


我该如何解决?请帮我

最佳答案

尝试以此替换适配器:

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


}

关于android - 如何在Android的适配器中设置数据,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/44141150/

10-10 08:44
查看更多