1.MainActvty主页
public class MainActivity extends AppCompatActivity { private ListView lv; String path="http://ic.snssdk.com/2/article/v25/stream/?count=20&min_behot_time=1457659690&bd_latitude=4.9E-324&bd_longitude=4.9E-324&bd_loc_time=1457672153&loc_mode=5&lac=4527&cid=28883&iid=3839760160&device_id=12246291682&ac=wifi&channel=baidu&aid=13&app_name=news_article&version_code=460&device_platform=android&device_type=iToolsAVM&os_api=19&os_version=4.4.4&uuid=352284045861006&openudid=84c1c7b192991cc6"; private List<Bean.Data> data; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); // 初始化ID lv = (ListView) findViewById(R.id.lv); indata(); } // 异步加载数据加载数据 private void indata() { new AsyncTask<String,Void,String>(){ private MyAdapter myAdapter; private ByteArrayOutputStream outputStream; @Override protected String doInBackground(String... params) { try { URL url = new URL(params[0]); HttpURLConnection connection= (HttpURLConnection) url.openConnection(); connection.setRequestMethod("GET"); connection.setConnectTimeout(3000); int responseCode = connection.getResponseCode(); if(responseCode==200){ InputStream inputStream = connection.getInputStream(); outputStream = new ByteArrayOutputStream(); int len; byte[] by=new byte[1024]; while ((len=inputStream.read(by))!=-1){ outputStream.write(by,0,len); } } } catch (Exception e) { e.printStackTrace(); } return outputStream.toString(); } @Override protected void onPostExecute(String s) { super.onPostExecute(s); Gson gson= new Gson(); Bean bean = gson.fromJson(s,Bean.class); // ctrl+Alt+v补齐 data = bean.data; myAdapter = new MyAdapter(); lv.setAdapter(myAdapter); } }.execute(path); } // 适配器 class MyAdapter extends BaseAdapter{ // 定义值来代替返回值 private static final int TYPE1=0; private static final int TYPE2=1; private TextView tv; private ImageView img1; private ImageView img2; private ImageView img3; @Override public int getCount() { return data.size(); } // 重写的一个方法 @Override public int getItemViewType(int position) { if(data.get(position).has_image){ return TYPE1; // 给图片的布局 }else{ return TYPE2; // 给文字的布局 } } // 重写的方法(几个布局就返回几) @Override public int getViewTypeCount() { return 2; } @Override public Object getItem(int position) { return null; } @Override public long getItemId(int position) { return 0; } @Override public View getView(int position, View convertView, ViewGroup parent) { // 得到上面的方法 int type=getItemViewType(position); // 判断是0还是1给不同的布局 switch (type){ case 0: convertView=View.inflate(MainActivity.this,R.layout.item2,null); img1 = (ImageView) convertView.findViewById(R.id.img1); img2 = (ImageView) convertView.findViewById(R.id.img2); img3 = (ImageView) convertView.findViewById(R.id.img3); break; case 1: convertView=View.inflate(MainActivity.this,R.layout.item1,null); tv = (TextView) convertView.findViewById(R.id.tv); break; } // 判断是0还是1给不同的值 switch (type){ case 0: // 给图片要注意下标越界和空指针 ImageLoader.getInstance().displayImage(data.get(position%data.size()).image_list.get(position%3).url_list.get(position%3).url,img1); ImageLoader.getInstance().displayImage(data.get(position%data.size()).image_list.get(position%3).url_list.get(position%3).url,img2); ImageLoader.getInstance().displayImage(data.get(position%data.size()).image_list.get(position%3).url_list.get(position%3).url,img3); // ImageLoader.getInstance().displayImage(list.get(position).image_list.get(position).url_list.get(0).url,img2); // ImageLoader.getInstance().displayImage(list.get(position).image_list.get(position).url_list.get(0).url,img3); break; case 1: tv.setText(data.get(position).title); break; } return convertView; } } }
2.main.xml
<ListView android:id="@+id/lv" android:layout_width="match_parent" android:layout_height="match_parent"></ListView>
3.Bean包
public class Bean { // 手动也就是自己封装的要用什么就封装什么 public List<Data> data; public class Data{ public boolean has_image; public String title; public List<Img> image_list; public class Img{ public List<UrlBean> url_list; public class UrlBean{ public String url; } } } }