【发布时间】:2016-08-25 17:51:24
【问题描述】:
我尝试用我的 Json Response 实现 Endless Recycler View。
这是我的 Json 回复 Link
我使用 jsonschema2pojo.org 生成我的模型,并成功将数据加载到我的 recyclerview 中。
但我需要实现无尽的回收器视图:
这是我的 RecyclerAdapter :
public class AparatAdapter extends RecyclerView.Adapter<AparatAdapter.ViewHolder> {
private Context context;
private ArrayList<Categoryvideo> categoryVideos;
//=============================constructor
public AparatAdapter(Context context, ArrayList<Categoryvideo> categoryVideos) {
this.context = context;
this.categoryVideos = categoryVideos;
}
//=============================viewholder
public class ViewHolder extends RecyclerView.ViewHolder{
private TextView txtTitle ,txtCount ,txtSender ,txtDate;
private ImageView imgRow;
public ViewHolder(View itemView) {
super(itemView);
txtTitle = (TextView)itemView.findViewById(R.id.txt_title_row);
txtCount = (TextView)itemView.findViewById(R.id.txt_count_dynamic_row);
txtSender = (TextView)itemView.findViewById(R.id.txt_sender_dynamic_row);
txtDate = (TextView)itemView.findViewById(R.id.txt_date_dynamic_row);
imgRow = (ImageView)itemView.findViewById(R.id.img_row);
}
}
//================================oncreateviewholder
@Override
public ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.row_layout, parent,false);
return new ViewHolder(view);
}
//================================= onbindviewholder
@Override
public void onBindViewHolder(ViewHolder holder, int position) {
holder.txtTitle.setText(categoryVideos.get(position).getTitle());
holder.txtCount.setText(categoryVideos.get(position).getVisitCnt().toString());
holder.txtSender.setText(categoryVideos.get(position).getSenderName());
holder.txtDate.setText(categoryVideos.get(position).getSdate().toString());
Glide.with(holder.itemView.getContext()).load(categoryVideos.get(position).getSmallPoster())
.into(holder.imgRow);
}
//==================================getitemcount
@Override
public int getItemCount() {
return categoryVideos.size();
}
}
这是我通过改造加载 json 的活动:
public class SargarmiActivity extends AppCompatActivity {
private RecyclerView recyclerView;
private AparatAdapter adapter;
private LinearLayoutManager layoutManager;
private ArrayList<Categoryvideo> categoryvideos;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_sargarmi);
initViews();
}
//=================================================
private void initViews() {
recyclerView = (RecyclerView) findViewById(R.id.recycler_sargarmi);
recyclerView.setHasFixedSize(true);
layoutManager = new LinearLayoutManager(SargarmiActivity.this);
recyclerView.setLayoutManager(layoutManager);
sendRequest();
}
//=================================================
private void sendRequest() {
recyclerView.addOnScrollListener(new EndlessRecyclerViewScrollListener(layoutManager) {
@Override
public void onLoadMore(int page, int totalItemsCount) {
loadMore();
}
});
getData();
}
//=======================================================
private void getData() {
//1
Retrofit retrofit = new Retrofit.Builder()
.baseUrl("http://www.aparat.com/etc/api/")
.addConverterFactory(GsonConverterFactory.create())
.build();
//2
ApiInterface request = retrofit.create(ApiInterface.class);
//3
Call<JSONResponse> call = request.getJsonResponse();
//4
call.enqueue(new Callback<JSONResponse>() {
@Override
public void onResponse(Call<JSONResponse> call, Response<JSONResponse> response) {
if (response.isSuccessful()) {
JSONResponse jsonResponse = response.body();
categoryvideos = new ArrayList<>(jsonResponse.getCategoryvideos());
adapter = new AparatAdapter(SargarmiActivity.this, categoryvideos);
recyclerView.setAdapter(adapter);
} else {
Toast.makeText(SargarmiActivity.this, "Error darim else onresponse", Toast.LENGTH_SHORT).show();
}
}
@Override
public void onFailure(Call<JSONResponse> call, Throwable t) {
Toast.makeText(SargarmiActivity.this, "Error darim onFailure()", Toast.LENGTH_SHORT).show();
}
});
}
//=============== Load more Endless =====================
private void loadMore() {
}
}
正如您在 json 中看到的那样,我的分页 url 嵌入在 ui 对象中。而且我不知道应该在我的活动中的 loadmore() 方法中写什么。
【问题讨论】:
标签: android json pagination retrofit2