用XListView實現向上重新整理,向下追加資料,並且多條目載入
阿新 • • 發佈:2018-11-12
開始佈局
此處只展示Xlistview的佈局
<?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=".ui.MainActivity"> <com.example.mylibrary.me.maxwin.view.XListView android:layout_width="match_parent" android:layout_height="match_parent" android:id="@+id/xlv" ></com.example.mylibrary.me.maxwin.view.XListView> </android.support.constraint.ConstraintLayout>
開始java程式碼
MainActivity
package com.example.day9_xlistview.ui; import android.os.AsyncTask; import android.os.Bundle; import android.support.v7.app.AppCompatActivity; import android.widget.Toast; import com.example.day9_xlistview.R; import com.example.day9_xlistview.adpater.MAdapter; import com.example.day9_xlistview.bean.Caipu; import com.example.mylibrary.me.maxwin.view.XListView; import com.google.gson.Gson; import java.io.BufferedReader; import java.io.IOException; import java.io.InputStream; import java.io.InputStreamReader; import java.net.HttpURLConnection; import java.net.MalformedURLException; import java.net.URL; import java.util.ArrayList; import java.util.Date; import java.util.List; public class MainActivity extends AppCompatActivity { private XListView xlv; private int page=0; private MAdapter ma; private ArrayList<Caipu.ResultBean.DataBean> list; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); //查詢資源id xlv=findViewById(R.id.xlv); list=new ArrayList<Caipu.ResultBean.DataBean>(); //新增介面卡 ma=new MAdapter(MainActivity.this,list); xlv.setAdapter(ma); //是否開啟下拉重新整理 上拉載入 xlv.setPullLoadEnable(true); //設定監聽 xlv.setXListViewListener(new XListView.IXListViewListener() { @Override public void onRefresh() { //重新整理資料(此處介面頁面是從0開始) page=0; loadData(page); } //載入更多 @Override public void onLoadMore() { loadData(page); } }); //一進來就去載入第一頁資料 loadData(page);//page初始值為0 } private void loadData(int page) { final String path="http://apis.juhe.cn/cook/query?key=3ec004200a6a2f4cf4774e480c006375&menu=%E8%A5%BF%E7%BA%A2%E6%9F%BF&rn=10&pn="; String UrlWithPagenum=path+page; //載入網路資料 new AsyncTask<String,String,List<Caipu.ResultBean.DataBean>>(){ @Override protected List<Caipu.ResultBean.DataBean> doInBackground(String... strings) { Caipu caipu=null; try { URL url=new URL(strings[0]); try { HttpURLConnection urlConnection= (HttpURLConnection) url.openConnection(); urlConnection.setRequestMethod("GET"); urlConnection.setConnectTimeout(5000); urlConnection.setReadTimeout(5000); int responseCode=urlConnection.getResponseCode(); //請求成功 if(responseCode==200){ String textString=StreantoString(urlConnection.getInputStream()); urlConnection.disconnect(); Gson gson=new Gson(); caipu=gson.fromJson(textString,Caipu.class); } } catch (IOException e) { e.printStackTrace(); } } catch (MalformedURLException e) { e.printStackTrace(); } //把資料返回 return caipu == null ? null : caipu.getResult().getData(); } //更新ui @Override protected void onPostExecute(List<Caipu.ResultBean.DataBean> dataBeans) { super.onPostExecute(dataBeans); //判斷是否取得資料 if(dataBeans==null){ Toast.makeText(MainActivity.this, "請求資料錯誤", Toast.LENGTH_LONG).show(); return; } //如果有資料,則更新資料 updateData(dataBeans); //載入重新整理完成 loadCompleted(); } }.execute(UrlWithPagenum); } private void updateData(List<Caipu.ResultBean.DataBean> dataBeans) { if(page==0){ ma.setDatas(dataBeans); //設定更新時間 Date date=new Date(); xlv.setRefreshTime( date.toLocaleString()); } else { ma.addDatas(dataBeans); } } //通過 載入 / 重新整理 完成 private void loadCompleted() { //通過ListView:重新整理、載入完成 //資料更新完成,頁面++ page++; //完成則停止 xlv.stopLoadMore(); xlv.stopRefresh(); } private String StreantoString(InputStream inputStream) throws IOException { BufferedReader bufferedReader=new BufferedReader(new InputStreamReader(inputStream)); StringBuilder stringBuilder=new StringBuilder(); String str=null; while ((str=bufferedReader.readLine())!=null){ stringBuilder.append(str); } bufferedReader.close(); return stringBuilder.toString(); } }
Adapter
package com.example.day9_xlistview.adpater; import android.view.View; import android.view.ViewGroup; import android.widget.BaseAdapter; import android.widget.ImageView; import android.widget.TextView; import com.example.day9_xlistview.R; import com.example.day9_xlistview.bean.Caipu; import com.example.day9_xlistview.configs.ImageLoaderconfigs; import com.example.day9_xlistview.ui.MainActivity; import com.nostra13.universalimageloader.core.ImageLoader; import java.util.ArrayList; import java.util.List; public class MAdapter extends BaseAdapter{ private MainActivity mainActivity; private ArrayList<Caipu.ResultBean.DataBean> list; public MAdapter(MainActivity mainActivity, ArrayList<Caipu.ResultBean.DataBean> list) { this.mainActivity = mainActivity; this.list = list; } @Override public int getItemViewType(int position) { if(position%2==0){ return super.getItemViewType(position); } else{ return 1; } } @Override public int getViewTypeCount() { return super.getViewTypeCount()+1; } /** * 更新資料 */ public void setDatas(List<Caipu.ResultBean.DataBean> datas) { //先清空所有資料 list.clear(); if (datas != null) { list.addAll(datas); notifyDataSetChanged(); } } /** * 追加資料 */ public void addDatas(List<Caipu.ResultBean.DataBean> datas) { if (datas != null) { list.addAll(datas); notifyDataSetChanged(); } } @Override public int getCount() { return list.size(); } @Override public Object getItem(int position) { return list.get(position); } @Override public long getItemId(int position) { return position; } @Override public View getView(int position, View convertView, ViewGroup parent) { ViewHolder vh=null; if(convertView==null){ convertView=View.inflate(mainActivity,getItemViewType(position)==0?R.layout.lv_item:R.layout.lv_item2,null); vh=new ViewHolder(convertView); } else { vh= (ViewHolder) convertView.getTag(); } Caipu.ResultBean.DataBean data= (Caipu.ResultBean.DataBean) getItem(position); vh.bindData(data,position); return convertView; } class ViewHolder { TextView id; TextView title; ImageView iv; public ViewHolder(View viewItem) { id=viewItem.findViewById(R.id.id); title=viewItem.findViewById(R.id.title); iv=viewItem.findViewById(R.id.iv); viewItem.setTag(this); } public void bindData(Caipu.ResultBean.DataBean data,int position) { id.setText(data.getId()); title.setText(data.getTitle()); //下標為偶數時才展示圖片 if(getItemViewType(position)==0){ ImageLoader.getInstance().displayImage(data.getAlbums().get(0),iv, ImageLoaderconfigs.getops(mainActivity)); } } } }
新增許可權
<uses-permission android:name="android.permission.INTERNET"></uses-permission>