例題:XListView上拉刷新,下拉加載
導入XListView工具類:{File>ImportModule...>導入工具類地址》》》》導完以後右鍵須要用到工具類的工程>Open Module Settings>Dependencies>工具類>肯定OK}
加載權限:<uses-permission android:name="android.permission.INTERNET"></uses-permission>
佈局:<com.bawei.jane.mxlistview.view.XListView
android:layout_height="match_parent"
android:layout_width="match_parent"
android:id="@+id/xlv"/>
=====================================================================
主要代碼:
private XListView xlv;
private int pageIndex=1;
private String urlpart="http://www.yulin520.com/a2a/impressApi/news/mergeList?pageSize=10&page=";
private String url=urlpart+pageIndex;
private MyAdapter adapter;
private List<Result.DataBean> data=new ArrayList<>();
//操做類型 1:刷新操做 2:加載更多的操做
private int operType=1;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
//查找控件
xlv = findViewById(R.id.xlv);
//對xlistview進行設置
xlv.setPullLoadEnable(true);//上拉加載更多
xlv.setPullRefreshEnable(true);//下拉刷新
//設置接口
xlv.setXListViewListener(new XListView.IXListViewListener() {
@Override
public void onRefresh() {//刷新
//刷新時,從新請求第1頁的數據
pageIndex=1;
url=urlpart+pageIndex;
//從新賦值
operType=1;
MyTask myTask=new MyTask();
myTask.execute(url);
}
@Override
public void onLoadMore() {//加載更多
//頁數增長
pageIndex++;
url=urlpart+pageIndex;
//從新賦值
operType=2;//加載更多
Log.d("zzz","loadMore:"+url);
MyTask task=new MyTask();
task.execute(url);
}
});
//進行網絡請求
MyTask myTask=new MyTask();
myTask.execute(url);
}
class MyTask extends AsyncTask<String,Void,String> {
@Override
protected String doInBackground(String... strings) {
try {
URL url=new URL(strings[0]);
HttpURLConnection urlConnection = (HttpURLConnection) url.openConnection();
urlConnection.setConnectTimeout(5000);
urlConnection.setReadTimeout(5000);
urlConnection.setRequestMethod("GET");
if(urlConnection.getResponseCode()==200){
//獲取數據
InputStream inputStream = urlConnection.getInputStream();
String s = StreamToString.streamToStr(inputStream, "utf-8");
Log.d("zzz","---:"+s);
return s;
}
} catch (Exception e) {
e.printStackTrace();
}
return null;
}
@Override
protected void onPostExecute(String s) {
Gson gson = new Gson();
Result result = gson.fromJson(s, Result.class);
//data = result.getData();
if (operType == 1) {//表明刷新操做
data.clear();//清空原有的集合數據
}
//增長新的數據集合到原來的集合對象中
data.addAll(result.getData());
setAdapter();
if (operType == 1) {
xlv.stopRefresh();//關閉頭佈局
Date date = new Date(System.currentTimeMillis());
SimpleDateFormat sf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
String refreshTime = sf.format(date);
xlv.setRefreshTime(refreshTime);//設置刷新時間
} else {
xlv.stopLoadMore();//關閉尾佈局
}
}
}
public void setAdapter(){
if(adapter==null){
adapter = new MyAdapter(data,MainActivity.this);
xlv.setAdapter(adapter);
}else{
adapter.notifyDataSetChanged();
}
}
====================================================================
解析類:Result
public class Result {
json解析類(快捷鍵ALT+S)GsonFormt
}
======================================================================
適配器類:
class MyAdapter extends BaseAdapter{
private List<Result.DataBean> data;
private Context context;
public MyAdapter(List<Result.DataBean> data, Context context) {
this.data = data;
this.context = context;
}
@Override
public int getCount() {
return data.size();
}
@Override
public Object getItem(int i) {
return data.get(i);
}
@Override
public long getItemId(int i) {
return i;
}
@Override
public View getView(int i, View view, ViewGroup viewGroup) {
ViewHolder holder;
if(view==null){
view=View.inflate(context,R.layout.item,null);
holder=new ViewHolder();
holder.img=view.findViewById(R.id.img);
holder.textView=view.findViewById(R.id.tv);
view.setTag(holder);
}else{
holder=(ViewHolder) view.getTag();
}
holder.textView.setText(data.get(i).getTitle());
return view;
}
class ViewHolder{
ImageView img;
TextView textView;
}
}
====================================================================
適配器中的佈局
<RelativeLayout
xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent"
android:layout_height="match_parent">
<ImageView
android:layout_height="80dp"
android:layout_width="80dp"
android:id="@+id/img"/>
<TextView
android:layout_height="wrap_content"
android:layout_width="wrap_content"
android:id="@+id/tv"
android:layout_toRightOf="@+id/img"/>
</RelativeLayout>
================================================================
工具類:StreamToString
class StreamToString { public static String streamToStr(InputStream inputStream, String chartSet){ StringBuilder builder=new StringBuilder(); try { BufferedReader br=new BufferedReader(new InputStreamReader(inputStream,chartSet)); String con; while ((con=br.readLine())!=null){ builder.append(con); } br.close(); return builder.toString(); } catch (Exception e) { e.printStackTrace(); } return ""; }}=====================================================================