Listview使用BaseAdapter添加不同布局
2016-06-18 10:18
369 查看
把生成的Demo演示放出来
操作步骤简单的分为两步
1.不同布局的XML文件
2.自定义BaseAdapter,重写方法
关键点:
1.在getItemViewType()方法中,根据点击的item下标,指定该下标将要加载的布局并返回该布局类型,就是例子中的XML_1。
2.在getview()方法中,根据getItemViewType()方法返回的布局类型进行加载。
3.加载完相应的布局之后,设置控件的显示内容或点击事件等。(例子中只给出了提示,没有详细实现。)。
Androidstudio的module文件百度云下载地址
链接:http://pan.baidu.com/s/1kUQj8OJ 密码:5h2q
操作步骤简单的分为两步
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
相关文章推荐
- 完美实现Android ListView中的TextView的跑马灯效果
- android上改变listView的选中颜色
- Delphi7中Listview的常用功能汇总
- Delphi控件ListView的属性及使用方法详解
- Android ListView弹性效果的实现方法
- android中ListView数据刷新时的同步方法
- Android提高之ListView实现自适应表格的方法
- Android中实现水平滑动(横向滑动)ListView示例
- Android ListView分页功能实现方法
- C#实现ListView选中项向上或向下移动的方法
- C#下listview如何插入图片
- Listview加载的性能优化是如何实现的
- C#实现listview Group收缩扩展的方法
- C# listview添加combobox到单元格的实现代码
- ListView 百分比进度条(delphi版)
- Android listview多视图嵌套多视图
- ListView Adapter优化 实例
- Android用ListView显示SDCard文件列表的小例子
- Adapter实现ListView带多选框等状态的自定义控件的注意事项
- asp.net ListView 数据绑定