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.bwei.Bean.Goods; import com.nostra13.universalimageloader.core.ImageLoader; import java.util.ArrayList; //一、整个布局是一个listview,而listview里面是嵌套了不同展示类型的item, // 平常只显示一种listview条目,我们会用到常用的四个方法,但是显示不同种类型item的时候, // 还需要实现两个重要的API // 1.//返回条目的类型 // getItemViewType() // 2.//返回条目有多少种类型 // getViewTypeCount() // 二.我们要通过定义的type,也就是0.1.2.3,或者在网上获取的类型type, // 在getView方法中通过判断去展示不同的item.
这里图片使用ImageLoader写的 别忘的加
-依赖 compile 'com.nostra13.universalimageloader:universal-image-loader:1.9.5'
3--重写MApp类extends Application, 切记要在清单文件调用;切记要在清单文件调用;切记要在清单文件调用;
public class MainActivity extends AppCompatActivity { //list集合 private ArrayList<Goods> list; //路径 String imgUrl = "http://image.tianjimedia.com/uploadImages/2012/067/N80N0GUA36N0.jpg"; //控件 private ListView lv; //调用方法 private ImageLoader instance; //获取适配器 private MyAdaper myAdaper; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); //出事值 indata(); //控件 lv = (ListView) findViewById(R.id.lv); //获取Mapp来的参数 instance = ImageLoader.getInstance(); //实力化适配器 myAdaper = new MyAdaper(); //获取适配器 lv.setAdapter(myAdaper); } private void indata() { //集合 list = new ArrayList<Goods>(); list.add(new Goods("商品3", "23", 0)); list.add(new Goods("商品4", "24", imgUrl, 1)); list.add(new Goods("商品2", "22", imgUrl, 1)); list.add(new Goods("商品5", "25", 0)); list.add(new Goods("商品6", "26", imgUrl, 1)); list.add(new Goods("商品21", "21", 0)); list.add(new Goods("商品5", "25", 0)); list.add(new Goods("商品22", "22", imgUrl, 1)); list.add(new Goods("商品23", "23", 0)); list.add(new Goods("商品24", "24", imgUrl, 1)); list.add(new Goods("商品25", "25", 0)); list.add(new Goods("商品26", "26", imgUrl, 1)); list.add(new Goods("商品31", "21", 0)); list.add(new Goods("商品32", "22", imgUrl, 1)); list.add(new Goods("商品34", "24", imgUrl, 1)); list.add(new Goods("商品36", "26", imgUrl, 1)); list.add(new Goods("商品33", "23", 0)); list.add(new Goods("商品35", "25", 0)); Log.e("tag", list.toString() + "+++++++++"); } class MyAdaper extends BaseAdapter { @Override public int getCount() { return list.size(); } @Override public Object getItem(int i) { return null; } @Override public long getItemId(int i) { return 0; } //当你的listview里的布局多样化的时候,viewholder的作用就比较的体现了 //加入你两种模式的布局,当方式回收的时候,你会用setTag分别记录是哪两种 //这两种模式会被封装到viewholder中进行保存方便下次使用 @Override public View getView(int i, View view, ViewGroup viewGroup) { //取出id来判断多条目 int id = list.get(i).getId(); switch (id) { case 0: viewholder1 holder1 = null; if (holder1 == null) { holder1 = new viewholder1(); view = View.inflate(MainActivity.this, R.layout.f1, null); holder1.tv = view.findViewById(R.id.tv); view.setTag(holder1); } else { holder1 = (viewholder1) view.getTag(); } holder1.tv.setText(list.get(i).getName() + " " + list.get(i).getPrice()); break; case 1: viewholder2 holder2 = null; if (holder2 == null) { holder2 = new viewholder2(); view = View.inflate(MainActivity.this, R.layout.f2, null); holder2.tv1 = view.findViewById(R.id.tv1); holder2.image = view.findViewById(R.id.img); view.setTag(holder2); } else { holder2 = (viewholder2) view.getTag(); } holder2.tv1.setText(list.get(i).getName() + " " + list.get(i).getPrice()); ; String Urlimg = list.get(i).getImg(); instance.displayImage(Urlimg, holder2.image); break; } return view; } //返回条目有多少种类型 @Override public int getViewTypeCount() { return 2; } //需要实现两个重要的API(getViewTypeCount()、getItemViewType()) //返回条目的类型 @Override public int getItemViewType(int position) { return list.get(position).getId(); } } public class viewholder1 { TextView tv; } public class viewholder2 { TextView tv1; ImageView image; } }