一、基本概念
实现一个Item的多布局。像我们经常在用的各种即时通讯工具,QQ、微信等,假设他们的会话界面是ListView实现的,那么ListView就有多种Item布局,要实现ListView里面有多种Item,就要重写适配器的两个方法getViewTypeCount()和getItemViewType(int position),第一个方法是返回Item的种类数目,第二个是返回当前Item是哪种类型。重写getItemViewType()方法对应View是哪个类别,以及getViewTypeCount()方法返回 view总共多少个类别!然后再getView那里调用getItemViewType获得对应类别,再加载对应的View!
二、示例代码
先建两个javaBean,一个是App,一个是Book,代码如下所示:
package com.nyl.updatelistview;/** * Created by Administrator on 2017/3/11 0011. */public class App { private int icon; private String name; public App(int icon,String name){ this.icon = icon; this.name = name; } public int getIcon() { return icon; } public void setIcon(int icon) { this.icon = icon; } public String getName() { return name; } public void setName(String name) { this.name = name; }}
package com.nyl.updatelistview;/** * Created by Administrator on 2017/3/11 0011. */public class Book { private String name; private String author; public Book(String name,String author){ this.author = author; this.name = name; } public String getName() { return name; } public void setName(String name) { this.name = name; } public String getAuthor() { return author; } public void setAuthor(String author) { this.author = author; }}
接下来建两个布局,布局也是非常简单的,代码如下所示:
在写适配器类之前,我们先定义好Book和App的Id,在strings.xml的目录里建,代码如下:
好了,这些都是比较简单的,我们进入核心写一个MutiLayoutAdapter多个布局大适配器,代码如下所示:
package com.nyl.updatelistview;import android.content.Context;import android.view.LayoutInflater;import android.view.View;import android.view.ViewGroup;import android.widget.BaseAdapter;import android.widget.ImageView;import android.widget.TextView;import java.util.ArrayList;/** * Created by Administrator on 2017/3/11 0011. */public class MutiLayoutAdapter extends BaseAdapter{ //定义两个类别标准 private static final int TYPE_BOOK = 0; private static final int TYPE_APP = 1; private Context context; private ArrayList
最后一步是自然而然就是MainActivity.java,代码如下:
package com.nyl.updatelistview;import android.app.Activity;import android.os.Bundle;import android.widget.ListView;import java.util.ArrayList;public class MainActivity extends Activity { private static final int TYPE_BOOK = 0; private static final int TYPE_APP = 1; private ListView listView; private ArrayListdata = new ArrayList<>(); private MutiLayoutAdapter myAdapter = null; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); //数据准备 data = new ArrayList (); for (int i = 0; i < 20;i++){ switch ((int) (Math.random() * 2)){ case TYPE_BOOK: data.add(new Book("《第一行代码》","郭霖")); break; case TYPE_APP: App app = new App(R.mipmap.book_center__ic_video_media_thumb_disabled,"海豚"); data.add(app); break; } } listView = (ListView) findViewById(R.id.listView); myAdapter = new MutiLayoutAdapter(MainActivity.this,data); listView.setAdapter(myAdapter); }}
运行效果如下:
ListView Item多布局就学到这里,希望对android学习者有所帮助!