主Activity
public class MainActivity extends AppCompatActivity implements XListView.IXListViewListener{ XListView xlv; int NUM=1; List<Bean.ResultsBean> results; List<Bean.ResultsBean> list = new ArrayList<>(); boolean boo; LinearLayout ll; private MyApdata myApdata; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); xlv = (XListView) findViewById(R.id.xlv); //使xlistview支持下拉刷新和上拉加载 xlv.setPullRefreshEnable(true); xlv.setPullLoadEnable(true); xlv.setXListViewListener(this); ListGson(); } //ListView的解析 public void ListGson(){ new AsyncTask<String,String,String>(){ @Override protected String doInBackground(String... strings) { String read = getNetDataStr(); // 使用Gson把该字符输入流转换成JavaBean Log.i("打印",read); return read; } @Override protected void onPostExecute(String result) { super.onPostExecute(result); Log.i("信息",result); Gson gson = new Gson(); Bean bean = gson.fromJson(result, Bean.class); results = bean.getResults(); setAdapter(results); Date date = new Date(System.currentTimeMillis()); SimpleDateFormat simpleDateFormat = new SimpleDateFormat("HH:mm"); String time = simpleDateFormat.format(date); xlv.setRefreshTime(time); } }.execute(); } public void setAdapter(List<Bean.ResultsBean> list){ if(myApdata == null){ myApdata = new MyApdata(results, MainActivity.this); xlv.setAdapter(myApdata); }else{ myApdata.add(list,boo); myApdata.notifyDataSetChanged(); } } //下拉刷新 @Override public void onRefresh() { NUM++; boo=true; ListGson(); xlv.stopRefresh(); } //上拉加载 @Override public void onLoadMore() { NUM++; boo=false; ListGson(); xlv.stopLoadMore(); } public String getNetDataStr() { String json = null; try { URL url = new URL( "http://gank.io/api/data/Android/10/"+NUM); HttpURLConnection conn = (HttpURLConnection) url.openConnection(); //设置 conn.setReadTimeout(5000); conn.setConnectTimeout(5000); conn.setRequestMethod("GET"); int code = conn.getResponseCode(); if (code == 200) { InputStream is = conn.getInputStream(); ByteArrayOutputStream bos = new ByteArrayOutputStream(); int len = -1; byte[] buff = new byte[1024]; while((len = is.read(buff)) != -1){ bos.write(buff,0,len); } json = new String(bos.toByteArray()); } } catch (Exception e) { // TODO Auto-generated catch block e.printStackTrace(); } return json; } }
XlistView适配器
public class MyApdata extends BaseAdapter { //构造参数 private List<bean.DataBean>list; //创建上下文 private Context context; public BasApdata(List<bean.DataBean> list, Context context) { this.list = list; this.context = context; } public void add(List<bean.DataBean> data, boolean b){ for(bean.DataBean bean: data) { if (b){ list.add(0,bean); }else{ list.add(bean); } } } //有几个条目类型 @Override public int getViewTypeCount() { return 2; } //判断怎样分辨每个条目的位置 @Override public int getItemViewType(int position) { if(position%2==0){ return 0; }else{ return 1; } } @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 View getView(int i, View view, ViewGroup viewGroup) { ViewHolder holder=null; ViewHolder2 holder2 = null; int type = getItemViewType(i); //进行多条目的判断 switch (type){ //如果为0,则是第一种布局 case 0: if(view==null){ view=View.inflate(context,R.layout.itme_one,null); holder=new ViewHolder(); holder.iv= (ImageView) view.findViewById(R.id.iv); holder.tv1= (TextView) view.findViewById(R.id.tv1); view.setTag(holder); }else{ holder= (ViewHolder) view.getTag(); } holder.tv1.setText(list.get(i).getTitle()); ImageLoader.getInstance().displayImage(list.get(i).getImg(),holder.iv); break; //如果为1,则是第二种布局 case 1: if(view==null){ view=View.inflate(context,R.layout.itme_two,null); holder2=new ViewHolder2(); holder2.tv2= (TextView) view.findViewById(R.id.tv2); view.setTag(holder2); }else{ holder2= (ViewHolder2) view.getTag(); } holder2.tv2.setText(list.get(i).getTitle()); break; } DisplayImageOptions build = new DisplayImageOptions.Builder() .cacheInMemory(true) .cacheOnDisk(true) .showImageForEmptyUri(R.mipmap.ic_launcher) .showImageOnFail(R.mipmap.ic_launcher) .showImageOnLoading(R.mipmap.ic_launcher) .build(); return view; } //优化XlistView class ViewHolder{ ImageView iv; TextView tv1 ,Tv; } class ViewHolder2{ TextView tv2 ; } }