package com.qianqian.day9listview; import android.os.AsyncTask; import android.support.v7.app.AppCompatActivity; import android.os.Bundle; import android.util.Log; 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 com.nostra13.universalimageloader.core.ImageLoaderConfiguration; 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.Data; public class MainActivity extends AppCompatActivity { ListView lv; String path="http://169.254.19.1:8080/hu/news.json"; private int code; private List<Data.DataBean> list; private MyAdapter adapter; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); //找控件 list = new ArrayList<Data.DataBean>(); lv= (ListView) findViewById(R.id.lv); initData(); //设置适配器 } private void initData() { new AsyncTask<String, String, String>() { @Override protected String doInBackground(String... params) { //解析 getData(); ImageLoaderConfiguration configuration=ImageLoaderConfiguration.createDefault(MainActivity.this); ImageLoader.getInstance().init(configuration); return null; } @Override protected void onPostExecute(String result) { //刷新 // adapter.notifyDataSetChanged(); adapter = new MyAdapter(); //绑定 lv.setAdapter(adapter); super.onPostExecute(result); } }.execute(); } private void getData() { try { URL url=new URL(path); HttpURLConnection conn= (HttpURLConnection) url.openConnection(); conn.setConnectTimeout(5000); conn.setReadTimeout(5000); code = conn.getResponseCode(); Log.i("---------------------",code+""); if (code==200){ Gson gson=new Gson(); Data data = gson.fromJson(new InputStreamReader(conn.getInputStream(),"GBK"), Data.class); list=data.getData(); Log.i("----------",list+""); } } catch (Exception e) { e.printStackTrace(); } } class MyAdapter extends BaseAdapter{ public static final int TYPE_ONE = 1; public static final int TYPE_TWO = 2; public static final int TYPE_THREE = 3; // 在使用多条目加载的时候 返回当前position对应的类型 // ************必须满足的条件 getItemViewType的返回值 必须要小于getViewTypeCount的返回值 @Override public int getItemViewType(int position) { if(list.get(position).getType() == 10001){ return TYPE_ONE; }else if(list.get(position).getType() == 10002){ return TYPE_TWO; }else{ return TYPE_THREE; } } // 使用多条目加载时 一共有几种类型 // 从写该方法后,listview控件会知道 当前的布局样式不止一种 // 所以 当ListView发现convertview在复用时 类型匹配不上时 会重新让convertView加载一遍布局 @Override public int getViewTypeCount() { return 5; } @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 view, ViewGroup viewGroup) { ViewHolder1 holder1 = null; ViewHolder2 holder2 = null; ViewHolder3 holder3 = null; int type = getItemViewType(position); if(view == null){ if(type == TYPE_ONE) { view = View.inflate(MainActivity.this, R.layout.item_one, null); holder1 = new ViewHolder1(); holder1.news_id1 = view.findViewById(R.id.tv1_id); holder1.news_title1 = view.findViewById(R.id.tv1_title); holder1.news_summary1 = view.findViewById(R.id.tv1_summary); holder1.pic_url1 = view.findViewById(R.id.iv1); view.setTag(holder1); }else if(type == TYPE_TWO){ view = View.inflate(MainActivity.this, R.layout.itetwo, null); holder2 = new ViewHolder2(); holder2.news_id2 = view.findViewById(R.id.tv2_id); holder2.news_title2 = view.findViewById(R.id.tv2_title); holder2.news_summary2 = view.findViewById(R.id.tv2_summary); holder2.pic_url2 = view.findViewById(R.id.iv2); view.setTag(holder2); }else{ view = View.inflate(MainActivity.this, R.layout.itemthree, null); holder3 = new ViewHolder3(); holder3.news_id3 = view.findViewById(R.id.tv3_id); holder3.news_title3 = view.findViewById(R.id.tv3_title); holder3.news_summary3 = view.findViewById(R.id.tv3_summary); holder3.pic_url3 = view.findViewById(R.id.iv3); view.setTag(holder3); } }else{ if(type == TYPE_ONE){ holder1 = (ViewHolder1) view.getTag(); }else if(type == TYPE_TWO){ holder2 = (ViewHolder2) view.getTag(); }else{ holder3 = (ViewHolder3) view.getTag(); } } // 根据不同的情况 把进行赋值 if(type == TYPE_ONE) { holder1.news_id1.setText(list.get(position).getNews_id()); holder1.news_title1.setText(list.get(position).getNews_title()); holder1.news_summary1.setText(list.get(position).getNews_summary()); ImageLoader.getInstance().displayImage(list.get(position).getPic_url(),holder1.pic_url1); }else if(type == TYPE_TWO){ holder2.news_id2.setText(list.get(position).getNews_id()); holder2.news_title2.setText(list.get(position).getNews_title()); holder2.news_summary2.setText(list.get(position).getNews_summary()); ImageLoader.getInstance().displayImage(list.get(position).getPic_url(),holder2.pic_url2); }else{ holder3.news_id3.setText(list.get(position).getNews_id()); holder3.news_title3.setText(list.get(position).getNews_title()); holder3.news_summary3.setText(list.get(position).getNews_summary()); ImageLoader.getInstance().displayImage(list.get(position).getPic_url(),holder3.pic_url3); } return view; } } /** * news_id : 13811 * news_summary : 6月17—20日,“2016成都深港澳台嘉年华会”(简称嘉年华会)将在成都世纪城国际会展中心举办。其主办方励展华博借力旗 * news_title : 深港澳台千里连线,嘉年华会今夏入川 * pic_url : http://f.expoon.com/sub/news/2016/01/21/887844_230x162_0.jpg * type : 10002 */ public static class ViewHolder1{ TextView news_id1,news_title1,news_summary1; ImageView pic_url1; } public static class ViewHolder2{ TextView news_id2,news_title2,news_summary2; ImageView pic_url2; } public static class ViewHolder3{ TextView news_id3,news_title3,news_summary3; ImageView pic_url3; } }