Android : 基類抽取
阿新 • • 發佈:2018-12-04
需要的jar包
com.google.code.gson:gson:2.8.5
還有一個依賴類pulltolibrary
xml的程式碼
<?xml version="1.0" encoding="utf-8"?> <android.support.constraint.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="http://schemas.android.com/apk/res-auto" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" tools:context=".MainActivity"> <com.example.pulltolibrary.PullToRefreshListView android:id="@+id/Pull_To_Re" android:layout_width="match_parent" android:layout_height="match_parent"> </com.example.pulltolibrary.PullToRefreshListView> </android.support.constraint.ConstraintLayout>
介面卡
package com.bwie.administrator.pulltorefresh.adapter; import android.content.Context; import android.view.View; import android.view.ViewGroup; import android.widget.BaseAdapter; import android.widget.TextView; import com.bwie.administrator.pulltorefresh.R; import com.bwie.administrator.pulltorefresh.bean.MyData; import java.util.ArrayList; public class MyAdapter extends BaseAdapter { private Context context; private ArrayList<MyData.DataBean> datas; public MyAdapter(Context context, ArrayList<MyData.DataBean> datas) { this.context = context; this.datas = datas; } public ArrayList<MyData.DataBean> getDatas() { return datas; } public void setDatas(ArrayList<MyData.DataBean> datas) { this.datas = datas; } @Override public int getCount() { return datas.size(); } @Override public Object getItem(int position) { return null; } @Override public long getItemId(int position) { return 0; } @Override public View getView(int position, View convertView, ViewGroup parent) { ViewHolder holder = null; if (convertView == null) { holder = new ViewHolder(); convertView = View.inflate(context, R.layout.listview_item, null); holder.tv_name = convertView.findViewById(R.id.ListView_Title); convertView.setTag(holder); } else { holder = (ViewHolder) convertView.getTag(); } //賦值 holder.tv_name.setText(datas.get(position).getNews_title()); return convertView; } class ViewHolder { TextView tv_name; } }
BaseActivity基類抽取
package com.bwie.administrator.pulltorefresh.baseactivity; import android.os.Bundle; import android.support.annotation.Nullable; import android.support.v7.app.AppCompatActivity; import android.view.View; public abstract class BaseActivity extends AppCompatActivity implements View.OnClickListener { @Override protected void onCreate(@Nullable Bundle savedInstanceState) { super.onCreate(savedInstanceState); init(); } //用來更改頁面佈局 protected abstract int getLayoutId(); //初始化資料 protected abstract void initData(); //初始化元件 protected abstract void findViewById(); //獲取上一個頁面傳過來的引數 protected abstract void getNextData(); //註冊監聽 protected abstract void setlistener(); //頁面邏輯書寫 protected abstract void progressLogic(); void init() { if (getLayoutId() != 0) { setContentView(getLayoutId()); initData(); findViewById(); getNextData(); setlistener(); progressLogic(); } else { throw new IllegalArgumentException("請加上佈局檔案"); } } }
Activity的程式碼
package com.bwie.administrator.pulltorefresh;
import android.content.Context;
import android.os.Handler;
import android.os.Message;
import android.view.View;
import android.widget.ListView;
import com.bwie.administrator.pulltorefresh.adapter.MyAdapter;
import com.bwie.administrator.pulltorefresh.baseactivity.BaseActivity;
import com.bwie.administrator.pulltorefresh.bean.MyData;
import com.example.pulltolibrary.PullToRefreshBase;
import com.example.pulltolibrary.PullToRefreshListView;
import com.google.gson.Gson;
import java.io.BufferedReader;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.net.HttpURLConnection;
import java.net.URL;
import java.util.ArrayList;
import java.util.List;
public class MainActivity extends BaseActivity {
private PullToRefreshListView pull;
private Context context;
private MyAdapter adapter;
private ArrayList<MyData.DataBean> mdatas = new ArrayList<>();
private int mStart = 1;
private String mUrl = "http://api.expoon.com/AppNews/getNewsList/type/1/p/";
private Handler handler = new Handler() {
@Override
public void handleMessage(Message msg) {
//進行判斷
if (msg.what == 0) {
mdatas.addAll((List<MyData.DataBean>) msg.obj);
//進行重新整理
adapter.notifyDataSetChanged();
//取消一直重新整理的方法
pull.onRefreshComplete();
}
}
};
@Override
protected int getLayoutId() {
return R.layout.activity_main;
}
@Override
protected void initData() {
}
private void getData(final int index) {
new Thread(new Runnable() {
@Override
public void run() {
try {
URL url = new URL(mUrl + index);
HttpURLConnection connection = (HttpURLConnection) url.openConnection();
//進行判斷
if (connection.getResponseCode() == 200) {
InputStream stream = connection.getInputStream();
BufferedReader reader = new BufferedReader(new InputStreamReader(stream));
Gson gson = new Gson();
MyData myData = gson.fromJson(reader, MyData.class);
handler.sendMessage(handler.obtainMessage(0, myData.getData()));
}
} catch (Exception e) {
e.printStackTrace();
}
}
}).start();
}
@Override
protected void findViewById() {
pull = findViewById(R.id.Pull_To_Re);
//設定上下拉滑動的
pull.setMode(PullToRefreshBase.Mode.BOTH);
adapter = new MyAdapter(MainActivity.this, mdatas);
pull.setAdapter(adapter);
}
@Override
protected void getNextData() {
}
//監聽的方法
@Override
protected void setlistener() {
pull.setOnRefreshListener(new PullToRefreshBase.OnRefreshListener2<ListView>() {
@Override //滑鼠按下
public void onPullDownToRefresh(PullToRefreshBase<ListView> refreshView) {
mStart = 1;
mdatas.clear();
getData(mStart);
}
@Override //滑鼠擡起
public void onPullUpToRefresh(PullToRefreshBase<ListView> refreshView) {
mStart++;
getData(mStart);
}
});
}
@Override
protected void progressLogic() {
getData(mStart);
}
@Override
public void onClick(View v) {
}
}
以上