//添加依赖后,只需两部,赋值代码便可运行
//首先布局
<?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="com.example.mypullrefresh.MainActivity"> <com.handmark.pulltorefresh.library.PullToRefreshListView android:id="@+id/pull_refresh_list" android:layout_width="fill_parent" android:layout_height="fill_parent" android:cacheColorHint="#00000000" android:divider="#19000000" android:dividerHeight="4dp" android:fadingEdge="none" android:fastScrollEnabled="false" android:footerDividersEnabled="false" android:headerDividersEnabled="false" android:smoothScrollbar="true" /> </android.support.constraint.ConstraintLayout>
//MainActivity
public class MainActivity extends AppCompatActivity { private LinkedList<String> mListItems; private PullToRefreshListView mPullRefreshListView; private ArrayAdapter<String> mAdapter; private String[] mStrings = {"Abbaye de Belloc", "Abbaye du Mont des Cats", "Abertam", "Abondance", "Ackawi", "Acorn", "Adelost", "Affidelice au Chablis", "Afuega'l Pitu", "Airag", "Airedale", "Aisy Cendre", "Allgauer Emmentaler", "Abbaye de Belloc", "Abbaye du Mont des Cats", "Abertam", "Abondance", "Ackawi", "Acorn", "Adelost", "Affidelice au Chablis", "Afuega'l Pitu", "Airag", "Airedale", "Aisy Cendre", "Allgauer Emmentaler"}; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); mPullRefreshListView = (PullToRefreshListView) findViewById( R.id.pull_refresh_list); //默认可以下拉, 设置BOTH后也可以上啦; mPullRefreshListView.setMode(PullToRefreshBase.Mode.BOTH); mListItems = new LinkedList<>(); mListItems.addAll(Arrays.asList(mStrings)); mAdapter = new ArrayAdapter<String>(MainActivity.this, android.R.layout.simple_list_item_1, mListItems); mPullRefreshListView.setAdapter(mAdapter); //设置监听,PullToRefreshBase.OnRefreshListener2, mPullRefreshListView.setOnRefreshListener(new PullToRefreshBase.OnRefreshListener2<ListView>() { @Override public void onPullDownToRefresh(PullToRefreshBase<ListView> refreshView) { new MAsyncTask().execute(); } @Override public void onPullUpToRefresh(PullToRefreshBase<ListView> refreshView) { new MAsyncTask2().execute(); } }); } class MAsyncTask extends AsyncTask<Void,Void,String[]> { @Override protected String[] doInBackground(Void... voids) { try { Thread.sleep(2000); } catch (InterruptedException e) { e.printStackTrace(); } return new String[0]; } @Override protected void onPostExecute(String[] strings) { super.onPostExecute(strings); mListItems.addFirst("refresh item haha ..."); mAdapter.notifyDataSetChanged(); //让刷新UI隐藏; mPullRefreshListView.onRefreshComplete(); } } /** * 处理上拉加载的逻辑 */ class MAsyncTask2 extends AsyncTask<Void,Void,String[]>{ @Override protected String[] doInBackground(Void... voids) { try { Thread.sleep(2000); } catch (InterruptedException e) { e.printStackTrace(); } return new String[0]; } @Override protected void onPostExecute(String[] strings) { super.onPostExecute(strings); // 原先集合调用addAll(新集合) mListItems.addLast("loadMore Item haha1 ...."); mListItems.addLast("loadMore Item haha2 ...."); mListItems.addLast("loadMore Item haha3 ...."); mAdapter.notifyDataSetChanged(); //让刷新UI隐藏; mPullRefreshListView.onRefreshComplete(); } }
//请求真实借口部分代码,
lv = view.findViewById(R.id.lv); //设置可以下拉 lv.setMode(PullToRefreshBase.Mode.BOTH); myadapter = new Myadapter(); lv.setAdapter(myadapter); //URLEncoder.encode(title)将中文得url转换格式才能解析 new MAsyncTask().execute("http://gank.io/api/data/"+ URLEncoder.encode(title)+"/10/"+i); lv.setOnRefreshListener(new PullToRefreshBase.OnRefreshListener2<ListView>() { @Override //向下 public void onPullDownToRefresh(PullToRefreshBase<ListView> refreshView) { arr.clear(); i++; new MAsyncTask().execute("http://gank.io/api/data/"+ URLEncoder.encode(title)+"/10/"+i); } //向上 @Override public void onPullUpToRefresh(PullToRefreshBase<ListView> refreshView) { i++; new MAsyncTask().execute("http://gank.io/api/data/"+ URLEncoder.encode(title)+"/10/"+i); } }); } class Myadapter extends BaseAdapter { @Override public int getCount() { return arr.size(); } @Override public Object getItem(int i) { return arr.get(i); } @Override public long getItemId(int i) { return i; } class chen{ ImageView tu; TextView yi; TextView er; } @Override public View getView(int i, View view, ViewGroup viewGroup) { ex ex = arr.get(i); chen chen = new chen(); if(view==null){ view = View.inflate(getActivity(), R.layout.lvbj, null); chen.tu=view.findViewById(R.id.img); chen.yi=view.findViewById(R.id.na); chen.er=view.findViewById(R.id.ti); view.setTag(chen); }else{ chen = (chen) view.getTag(); } // chen.tu.setImageResource(); new AsyncTaskimg(chen.tu).execute(ex.getTu()); chen.yi.setText(ex.getName()); chen.er.setText(ex.getTime()); return view; } } class AsyncTaskimg extends AsyncTask<String,Void,Bitmap> { private ImageView tt; public AsyncTaskimg(ImageView tt) { this.tt = tt; } private Bitmap bitmap; @Override protected Bitmap doInBackground(String... strings) { try { URL url = new URL(strings[0]); HttpURLConnection urlConnection = (HttpURLConnection)url.openConnection(); //设置链接超时时间; urlConnection.setConnectTimeout(6000); //设置读取返回数据的超时时间 urlConnection.setReadTimeout(5000); int responseCode = urlConnection.getResponseCode(); //响应码200代表链接和返回数据成功 if(responseCode ==200){ InputStream inputStream = urlConnection.getInputStream(); bitmap = BitmapFactory.decodeStream(inputStream); } } catch (MalformedURLException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } return bitmap; } @Override protected void onPostExecute(Bitmap bitmap) { super.onPostExecute(bitmap); tt.setImageBitmap(bitmap); } } class MAsyncTask extends AsyncTask<String,Void,String> { @Override protected String doInBackground(String... strings) { StringBuilder stringBuilder = new StringBuilder(); String s=""; try { URL url = new URL(strings[0]); URLConnection urlConnection = url.openConnection(); InputStream inputStream = urlConnection.getInputStream(); BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(inputStream)); while((s=bufferedReader.readLine())!=null){ stringBuilder.append(s); } String pjsj = stringBuilder.toString(); Log.e("chen", "doInBackground: 拼接的内容"+pjsj ); } catch (MalformedURLException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } return stringBuilder.toString(); } @Override protected void onPostExecute(String s) { //连接适配器 super.onPostExecute(s); Gson gson = new Gson(); bean bean = gson.fromJson(s, bean.class); List<com.example.yue10kao.bean.ResultsBean> results = bean.getResults(); for (int i = 0; i < results.size(); i++) { if(results.get(i).getImages()!=null) { List<String> images = results.get(i).getImages(); String s1 = images.get(0); String desc = results.get(i).getDesc(); String publishedAt = results.get(i).getPublishedAt(); arr.add(new ex(s1,desc,publishedAt)); }else { String desc = results.get(i).getDesc(); String publishedAt = results.get(i).getPublishedAt(); arr.add(new ex( desc, publishedAt)); } Log.e("chen", "onPostExecute: 集合的内容"+arr ); } myadapter.notifyDataSetChanged(); lv.onRefreshComplete(); } } }