ListView的多布局是通过重写 getItemViewType(int position)和 getViewTypeCount() 来实现的。
getItemViewType(int position):获取position位置数据的类型。
getViewTypeCount():获取共有几种类型的数据。

实现效果:

我这里是通过ImageView和TextView实现了2种简单的布局,对于复杂的或者是更多的布局效果,实现方法也是类似的。

一、Activity的XML代码

  

二、Activity代码

public class RecentStudyActivity extends Activity {    private List list;    private RecentStydyAdapter adapter;    private ListView listView;    @Override    protected void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(R.layout.activity_recent_study);        init();        loadData();    }    private void init() {        listView = (ListView) findViewById(R.id.listview_study);        list = new ArrayList<>();        adapter = new RecentStydyAdapter(this, list);        listView.setAdapter(adapter);    }    private void loadData() {        int[] image = {        R.mipmap.ic_today_gaokao,        R.mipmap.ic_yesterday,         R.mipmap.ic_week,         R.mipmap.ic_earlier    };        list.add(image[0]);        list.add("Android高级1");        list.add("Android高级2");        list.add("Android高级3");        list.add("Android高级4");        list.add(image[1]);        list.add("Android基础2");        list.add("Android基础3");        list.add("Android基础4");        list.add(image[2]);        list.add("Android基础1");        list.add(image[3]);        list.add("Java基础1");        list.add("Java基础2");        list.add("Java基础3");        adapter.notifyDataSetChanged();    }}   

三、适配器代码

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.List;public class RecentStydyAdapter extends BaseAdapter {    private Context context;    private List list;    public RecentStydyAdapter(Context context, List list) {        this.context = context;        this.list = list;    }    @Override    public int getCount() {        int ret = 0;        if (list != null) {            ret = list.size();        }        return ret;    }    @Override    public int getItemViewType(int position) {        int ret = 0;        Object object = list.get(position);        //通过数据类型的不同类来设置item的类型        if (object instanceof String) {            ret = 0;        } else if (object instanceof Integer) {            ret = 1;        }        return ret;    }    @Override    public int getViewTypeCount() {        return 2;    }    @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 convertView, ViewGroup parent) {    //通过item的类型不同类来设置不同的布局        if (getItemViewType(position) == 0) {            convertView = bindTv(position, convertView, parent);        } else if (getItemViewType(position) == 1) {            convertView = bindImg(position, convertView, parent);        }        return convertView;    }    private View bindImg(int position, View convertView, ViewGroup parent) {        ViewHolder holder = null;        if (convertView == null) {            convertView = LayoutInflater.from(context).inflate(R.layout.item_recent_img, null);            holder = new ViewHolder();            holder.img = (ImageView) convertView.findViewById(R.id.img_recent);            convertView.setTag(holder);        } else {            holder = (ViewHolder) convertView.getTag();        }        Object object = list.get(position);        if (object instanceof Integer) {            int img = (int) object;            holder.img.setImageResource(img);        }        return convertView;    }    private View bindTv(int position, View convertView, ViewGroup parent) {        ViewHolder holder = null;        if (convertView == null) {            convertView = LayoutInflater.from(context).inflate(R.layout.item_recent_tv, null);            holder = new ViewHolder();            holder.tv = (TextView) convertView.findViewById(R.id.tv_recent);            convertView.setTag(holder);        } else {            holder = (ViewHolder) convertView.getTag();        }        Object object = list.get(position);        if (object instanceof String) {            String ret = (String) object;            holder.tv.setText(ret);        }        return convertView;    }    class ViewHolder {        TextView tv;        ImageView img;    }}

更多相关文章

  1. ListView加载多套布局
  2. Android如何在app中通过一个按钮直接跳转到的系统的权限设置页面
  3. Android中的OpenGL ES使用基础
  4. Invoke-customs are only supported starting with Android(安卓
  5. android相机Camera.Parameters所有的参数值
  6. Xutils3.0使用详解
  7. Android:Installation error: INSTALL_FAILED_INSUFFICIENT_STORA
  8. Android(安卓)查看及设置 SELinux 状态
  9. Android(安卓)基本组件介绍

随机推荐

  1. 了解Android 的支持库
  2. Android之monkey Test,Monkey测试中的黑
  3. Android邮件发送详解
  4. Android开发实践:自己动手编写图片剪裁应
  5. 更强续航,尽在 Android 9 Pie
  6. Android界面设计的4种方式之二——在Java
  7. Android ADB USB 驱动 万能配置方式
  8. Android入门进阶教程(17)-WindowManager
  9. Android 延向新领域:卡西欧宣布基于 Andro
  10. Android Activity之间跳转出现短暂黑屏的