ListView加载不同的条目

来源:互联网 发布:淘宝上的汝窑茶具 编辑:程序博客网 时间:2024/05/16 04:54

首先,ListView我们平时用的都比较多,以往的开发中用的也不叫多;

以前一直都是加载一样的布局一样的条目。

现在加载不同布局的条目:

这里用的数据是自定义的(有的需要在网上获取)

1.创建ListView布局(后面的item布局需要根据自定义数据的需求来添加)

<ListView    android:layout_width="match_parent"    android:layout_height="wrap_content"    android:id="@+id/listView"></ListView>
2.创建JavaBean类,写入自定义属性 (注意:里面需要多写一个类型的属性 及 Type)

public class DataBean {    //类型数据    public int type;    //文本数据     public String text;    //图片数据    public int images;    @Override    public String toString() {        return "DataBan{" +                "type=" + type +                ", text='" + text + '\'' +                ", images=" + images +                '}';    }}
//这里toString供后面打印使用  可以不用写

3.在MainActivity中写入代码

public class MainActivity extends AppCompatActivity {        //设置三种类型   来设置不同的item    private static final int FristType=1;                                            private static final int TwoType=2;    private static final int ThreeType=3;
 //上面这些在Android studio中可以利用const自动生成  
//自定义数据 String[] texts = {"玉皇", "王母", "长蛾", "八戒", "如来", "易宸锋", "守星者", "部长", "大师", "收藏家"}; private int[] images = {R.drawable.jx_left_listitem_1, R.drawable.jx_left_listitem_5, R.drawable.jx_left_listitem_2, R.drawable.jx_left_listitem_3, R.drawable.jx_left_listitem_4, R.drawable.jx_left_listitem_5, R.drawable.jx_left_listitem_6, R.drawable.jx_left_listitem_6, R.drawable.jx_left_listitem_4, R.drawable.jx_left_listitem_5};

    //创建集合    private List<DataBean> list;    private ListView listView;    @Override    protected void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(R.layout.activity_main);
  //控件      listView=(ListView)findViewById(R.id.listView);        //初始化数据        initData();       listView.setAdapter(new MyAdapter());    }   //初始化数据   下面打印出来有助于理解    private void initData() {        list=new ArrayList<>();        for (int i = 0; i < 10; i++) {           DataBean data=new DataBean();            //第一            if (i%2==0 ){             data.type=FristType;                data.text=texts[i];                Log.d("data","位置"+i+"里的数据:"+data.toString());                //第二            }else if (i%3==0){           data.type=TwoType;                data.text=texts[i];                data.images=images[i];                Log.d("data","位置"+i+"里的数据:"+data.toString());                //第三            }else {                data.type=ThreeType;                data.text=texts[i];                data.images=images[i];                Log.d("data","位置"+i+"里的数据:"+data.toString());            }            list.add(data);        }    }

4.下面是适配器(我写的是内部类,上面设置适配器的时候没有传参)

下面用到的布局(有三种类型  就需要三个不同的item)

第一个:

<?xml version="1.0" encoding="utf-8"?><LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"    android:orientation="vertical" android:layout_width="match_parent"    android:layout_height="match_parent">    <TextView        android:layout_width="wrap_content"        android:layout_height="wrap_content"        android:id="@+id/tv1"/></LinearLayout>
第二个:

<?xml version="1.0" encoding="utf-8"?><LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"    android:orientation="vertical" android:layout_width="match_parent"    android:layout_height="match_parent">    <TextView        android:layout_width="wrap_content"        android:layout_height="wrap_content"        android:id="@+id/tv2"/>    <ImageView        android:layout_width="wrap_content"        android:layout_height="wrap_content"        android:id="@+id/iv2"/></LinearLayout>
第三个:

<?xml version="1.0" encoding="utf-8"?><LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"    android:orientation="horizontal" android:layout_width="match_parent"    android:layout_height="match_parent">    <TextView        android:layout_width="wrap_content"        android:layout_height="wrap_content"        android:id="@+id/tv3"/>    <ImageView        android:layout_width="wrap_content"        android:layout_height="wrap_content"        android:id="@+id/iv3"/></LinearLayout>
注意:第二个和第三个里的布局方向不同

//listView显示不同条目的Adapter,比平常用的多了两个方法    class MyAdapter extends BaseAdapter{        @Override        public int getCount() {            return list.size();        }        @Override        public Object getItem(int position) {            return null;        }        @Override        public long getItemId(int position) {            return 0;        }     //表示有几种类型的item,这里有三种        @Override        public int getViewTypeCount() {            return 4;//这里注意必须比上面定义的数要大        }       //返回ListView所加载的item的类型        @Override        public int getItemViewType(int position) {            return list.get(position).type;        }        @Override        public View getView(int position, View convertView, ViewGroup parent) {            ViewHolder1 holder1=null;            ViewHolder2 holder2=null;            ViewHolder3 holder3=null;            int type = getItemViewType(position);            if (convertView==null){                //存值                switch (type){                    case FristType:                        holder1=new ViewHolder1();                        convertView=View.inflate(MainActivity.this,R.layout.item,null);                        holder1.tv1=(TextView) convertView.findViewById(R.id.tv1);                        convertView.setTag(holder1);                        break;                    case TwoType:                        holder2=new ViewHolder2();                        convertView=View.inflate(MainActivity.this,R.layout.item2,null);                        holder2.tv2=(TextView) convertView.findViewById(R.id.tv2);                        holder2.iv2=(ImageView)convertView.findViewById(R.id.iv2);                        convertView.setTag(holder2);                        break;                    case ThreeType:                        holder3=new ViewHolder3();                        convertView=View.inflate(MainActivity.this,R.layout.item3,null);                        holder3.tv3=(TextView) convertView.findViewById(R.id.tv3);                        holder3.iv3=(ImageView)convertView.findViewById(R.id.iv3);                        convertView.setTag(holder3);                        break;                }            }else {                //取值                switch (type){                    case FristType:                        holder1=(ViewHolder1) convertView.getTag();                        break;                    case TwoType:                        holder2=(ViewHolder2) convertView.getTag();                        break;                    case ThreeType:                        holder3=(ViewHolder3) convertView.getTag();                        break;                }            }            //设置值            switch (type){                case FristType:                  holder1.tv1.setText(list.get(position).text);                    break;                case TwoType:                    holder2.tv2.setText(list.get(position).text);                    holder2.iv2.setImageResource(list.get(position).images);                    break;                case ThreeType:                    holder3.tv3.setText(list.get(position).text);                    holder3.iv3.setImageResource(list.get(position).images);                    break;            }            return convertView;        }        class ViewHolder1{            TextView tv1;        }        class ViewHolder2{            TextView tv2;            ImageView iv2;        }        class ViewHolder3{            TextView tv3;            ImageView iv3;        }    }}
注:图片文件直接上传在drawable里

原创粉丝点击