Listview使用BaseAdapter添加不同布局

来源:互联网 发布:文件制作软件 编辑:程序博客网 时间:2024/06/05 22:20

把生成的Demo演示放出来
这里写图片描述

操作步骤简单的分为两步
1.不同布局的XML文件
2.自定义BaseAdapter,重写方法

关键点:
1.在getItemViewType()方法中,根据点击的item下标,指定该下标将要加载的布局并返回该布局类型,就是例子中的XML_1。
2.在getview()方法中,根据getItemViewType()方法返回的布局类型进行加载。
3.加载完相应的布局之后,设置控件的显示内容或点击事件等。(例子中只给出了提示,没有详细实现。)。

public class MainActivity extends Activity {    ListView listView=null;    //item显示的内容    String[] listitemstr = {"item1", "item2", "item3", "item4", "item5", "item6"};    @Override    protected void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(R.layout.activity_main);        //绑定listview        listView= (ListView) findViewById(R.id.my_listview);        myBaseAdapter adapter=new myBaseAdapter(this);        listView.setAdapter(adapter);    }    //自定义BaseAdapter    private class myBaseAdapter extends BaseAdapter {        final int XML_1 = 0;        final int XML_2 = 1;        Context mcontext;        LinearLayout linearLayout = null;        LayoutInflater inflater;        public myBaseAdapter(Context context) {            mcontext = context;            inflater = LayoutInflater.from(mcontext);        }        @Override        public int getCount() {            //返回item的数量            return listitemstr.length;        }        @Override        public int getItemViewType(int position) {            //根据item的位置返回不同的布局,(这里是前两个返回XML1布局)            if(2>position){                return XML_1;            }else {                return XML_2;            }        }        @Override        public Object getItem(int position) {            //返回item的名字            return listitemstr[position];        }        @Override        public long getItemId(int position) {            return position;        }        @Override        public View getView(int position, View view, ViewGroup viewGroup) {            //在这个方法中获取应该加载那种布局,然后加载相应的布局就可以了            viewHolder1 holder1 = null;            viewHolder2 holder2 = null;            //获取当前的类型            int type = getItemViewType(position);            if (null == view) {                //判断是哪种类型                switch (type) {                    case XML_1:                        //加载第一种item布局                        view = inflater.inflate(R.layout.listview_item_textview, viewGroup, false);                        holder1 = new viewHolder1();                        holder1.item_one_textview = (TextView) view.findViewById(R.id.item_one_textview);                        view.setTag(holder1);                        break;                    case XML_2:                        view = inflater.inflate(R.layout.listview_item_textview_checkbox, viewGroup, false);                        holder2 = new viewHolder2();                        holder2.item_two_textview = (TextView) view.findViewById(R.id.item_two_textview);                        holder2.item_two_checkbox = (CheckBox) view.findViewById(R.id.item_two_checkbox);                        view.setTag(holder2);                        break;                }            } else {                switch (type) {                    case XML_1:                        holder1 = (viewHolder1) view.getTag();                        break;                    case XML_2:                        holder2 = (viewHolder2) view.getTag();                        break;                }            }            switch (type){                case XML_1:                    //设置item textview显示的内容                    holder1.item_one_textview.setText(listitemstr[position]);                    break;                case XML_2:                    //设置item textview显示的内容 checkbox 全部选中                    holder2.item_two_textview.setText(listitemstr[position]);                    holder2.item_two_checkbox.setChecked(true);                    //可以设置checkbox的点击事件                    /*holder2.item_two_checkbox.setOnClickListener(new View.OnClickListener() {                        @Override                        public void onClick(View v) {                            //如果是选中状态 装入一个map里面保存  不是选中状态 从map里面移除                        }                    });*/                    break;            }            return view;        }    }    private class viewHolder1 {        TextView item_one_textview;    }    private class viewHolder2 {        TextView item_two_textview;        CheckBox item_two_checkbox;    }}

Androidstudio的module文件百度云下载地址
链接:http://pan.baidu.com/s/1kUQj8OJ 密码:5h2q

0 0
原创粉丝点击