https://github.com/Maxwin-z/XListView-Android
package com.example.asus.xlistview; import android.os.AsyncTask; import android.os.Handler; import android.os.Message; import android.support.v7.app.AppCompatActivity; import android.os.Bundle; import android.view.View; import android.view.ViewGroup; import android.widget.BaseAdapter; import android.widget.ImageView; import android.widget.ListView; import android.widget.TextView; import com.google.gson.Gson; import com.nostra13.universalimageloader.core.ImageLoader; import java.io.BufferedReader; 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.List; import Bean.News; import Bean.Shiti; import view.XListView; public class MainActivity extends AppCompatActivity implements XListView.IXListViewListener{ private myLv ad; private XListView lv; private int start=0; private String url="http://v.juhe.cn/toutiao/index?type=top&&key=22a108244dbb8d1f49967cd74a0c144d"; private List<Shiti> list=new ArrayList<>(); private List<Shiti> list1=new ArrayList<>(); private Handler handler=new Handler(); @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); initview(); new myAsynctask().execute(url); } private void initview() { lv = (XListView) findViewById(R.id.lv); lv.setXListViewListener(this); lv.setPullLoadEnable(true); list = new ArrayList<>(); } @Override public void onRefresh() { handler .postDelayed(new Runnable() { @Override public void run() { start+=5; list.clear(); list = inititm(list1); ad=new myLv(); lv.setAdapter(ad); onload(); } }, 2000); } private void onload() { lv.stopRefresh(); lv.stopLoadMore(); lv.setRefreshTime("刚刚"); }; @Override public void onLoadMore() { handler .postDelayed(new Runnable() { @Override public void run() { list = inititm(list1); ad.notifyDataSetChanged(); onload(); } }, 2000); } class myAsynctask extends AsyncTask<String,Void,String>{ @Override protected void onPostExecute(String s) { super.onPostExecute(s); System.out.println("s==="+s); Gson gson=new Gson(); News news = gson.fromJson(s, News.class); News.A result = news.result; List<News.B> data = result.data; for (int i = 0; i <data.size() ; i++) { News.B b = data.get(i); Shiti shiti=new Shiti(); shiti.title=b.title; shiti.url=b.url; shiti.thumbnail_pic_s=b.thumbnail_pic_s; list1.add(shiti); } if(list1!=null){ list = inititm(list1); ad = new myLv(); lv.setAdapter(ad); lv.stopRefresh(); lv.stopLoadMore(); } } @Override protected String doInBackground(String... strings) { try { URL url=new URL(strings[0]); HttpURLConnection connection= (HttpURLConnection) url.openConnection(); connection.connect(); if(connection.getResponseCode()==200){ StringBuffer sb=new StringBuffer(); InputStream inputStream = connection.getInputStream(); BufferedReader br=new BufferedReader(new InputStreamReader(inputStream)); String len=null; while ((len=br.readLine())!=null){ sb.append(len); } return sb.toString(); } } catch (Exception e) { e.printStackTrace(); } return null; } } private List<Shiti> inititm(List<Shiti> list1) { if(start>=list1.size()){ start=0; } for (int i = start; i <start+10; i++) { list.add(list1.get(i)); } return list; } class myLv extends BaseAdapter{ private final int a = 0;//多布局加载第一种布局 private final int b = 1;//多布局加载第二种布局 private final int num = 2;//一共两种布 @Override public int getCount() { return list.size(); } @Override public Object getItem(int i) { return list.get(i); } @Override public long getItemId(int i) { return i; } @Override public int getViewTypeCount() { return num; } @Override public int getItemViewType(int position) { if(position%2==0){ return a; }else { return b; } } @Override public View getView(int i, View view, ViewGroup viewGroup) { int type = getItemViewType(i); viewholder1 holder1=null; viewholder2 holder2=null; if(view==null){ switch (type){ case a: view=View.inflate(MainActivity.this,R.layout.list_yi,null); holder1=new viewholder1(); holder1.tv_title1=view.findViewById(R.id.tv_title1); holder1.img_tu1=view.findViewById(R.id.img_tu1); view.setTag(holder1); break; case b: view=View.inflate(MainActivity.this,R.layout.list_er,null); holder2=new viewholder2(); holder2.tv_title2=view.findViewById(R.id.tv_title2); holder2.img_tu2=view.findViewById(R.id.img_tu2); view.setTag(holder2); break; } }else{ switch (type){ case a: holder1= (viewholder1) view.getTag(); break; case b: holder2= (viewholder2) view.getTag(); break; } } switch (type){ case a: holder1.tv_title1.setText(list.get(i).title); ImageLoader.getInstance().displayImage(list.get(i).thumbnail_pic_s,holder1.img_tu1); break; case b: holder2.tv_title2.setText(list.get(i).title); ImageLoader.getInstance().displayImage(list.get(i).thumbnail_pic_s,holder2.img_tu2); break; } return view; } class viewholder1 { public TextView tv_title1; public ImageView img_tu1; } class viewholder2 { public TextView tv_title2; public ImageView img_tu2; } } }初始化imgagelode
<application android:name=".Applica"
package com.example.asus.xlistview; import android.app.Application; import com.nostra13.universalimageloader.core.DisplayImageOptions; import com.nostra13.universalimageloader.core.ImageLoader; import com.nostra13.universalimageloader.core.ImageLoaderConfiguration; import com.nostra13.universalimageloader.core.display.RoundedBitmapDisplayer; /** * Created by asus on 2017/8/15. */ public class Applica extends Application{ @Override public void onCreate() { super.onCreate(); initimageloder(); } private void initimageloder() { DisplayImageOptions options=new DisplayImageOptions.Builder(). displayer(new RoundedBitmapDisplayer(360)).//圆角
.cacheInMemory(true) //允许下载的图片缓存到SD卡中 .cacheOnDisk(true)
build(); ImageLoaderConfiguration cofig=new ImageLoaderConfiguration.Builder(this) .defaultDisplayImageOptions(options) .build(); ImageLoader.getInstance().init(cofig); } }