RecyclerView上拉重新整理,下拉載入
阿新 • • 發佈:2018-11-02
Activity介面方法
protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
mRefreshLayout = (SwipeRefreshLayout) findViewById(R.id.layout_swipe_refresh); initView();//初始化資源id
initDataFromServer(1);
recycler.addOnScrollListener(new RecyclerView.OnScrollListener() { @Override
public void onScrollStateChanged(RecyclerView recyclerView, int newState) {
super.onScrollStateChanged(recyclerView, newState);
if (newState == RecyclerView.SCROLL_STATE_IDLE) {
int lastVisiblePosition =linearLayoutManager.findLastVisibleItemPosition();
if (lastVisiblePosition >= linearLayoutManager.getItemCount() - 1) {
count++;
initDataFromServer(count);
}
});
public void onRefresh() {
if(count<1){
initDataFromServer(count);
Toast.makeText(MainActivity.this ,"已經是最新資料了!",Toast.LENGTH_SHORT).show();
} else{
initDataFromServer(count);
Toast.makeText(MainActivity.this,"資料重新整理了!",Toast.LENGTH_SHORT).show();
}
//資料重新載入完成後,提示資料發生改變,並且設定現在不在重新整理
adapter.notifyDataSetChanged();
mRefreshLayout.setRefreshing(false);
}
});
}
//呼叫網路工具類請求網路資料
private void initDataFromServer(int index) {
HttpUtils http = new HttpUtils();
http.setCallBack(this);
//預設的page引數為1
http.NetWorkFromServer(index);
}
//初始化view
private void initView() {
//找到資源id
tv = (TextView) findViewById(R.id.ttt);
recycler = (RecyclerView) findViewById(R.id.recycler);
linearLayoutManager = new LinearLayoutManager(this);
//設定顯示效果為線性
recycler.setLayoutManager(linearLayoutManager);
}
//通過介面回撥返回資料
@Override
public void callBack(final ResponseBean responseBean) {
runOnUiThread(new Runnable() {
@Override
public void run() {
//設定介面卡
adapter = new MyRecyclerView(responseBean.data, MainActivity.this);
recycler.setAdapter(adapter);
}
});
}
請求網路的工具類
public class HttpUtils {
//定義變數用於接收介面物件
private static CallBackResponse callbackResponse;
public void setCallBack(CallBackResponse callbackResponse) {
this.callbackResponse = callbackResponse;
}
public void NetWorkFromServer(int page) {
String url = "http://www.yulin520.com/a2a/impressApi/news/mergeList?sign=C7548DE604BCB8A17592EFB9006F9265&pageSize=20&gender=2&ts=1871746850&page=" + page;
OkHttpClient ok = new OkHttpClient();//建立okhttp物件
//設定url
final Request request = new Request.Builder()
.url(url)
.build();
Call call = ok.newCall(request);//得到call物件
call.enqueue(new Callback() {
@Override
public void onFailure(Call call, IOException e) {
Log.e("TAG","失敗了");
}
@Override
public void onResponse(Call call, Response response) throws IOException {
//response.body().string()方法只能使用一次,不然拿不到資料
if (response.isSuccessful() && response.body() != null){
Gson gson = new Gson();
ResponseBean responseBean = gson.fromJson(response.body().string(), ResponseBean.class);
callbackResponse.callBack(responseBean);
}
}
});
}
}