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
- Listview使用BaseAdapter添加不同布局
- Iwfu-ListView(二) -BaseAdapter分析以及实现同一个ListView加载不同的布局
- ListView -- BaseAdapter的使用
- listview的使用----BaseAdapter
- 使用BaseAdapter实现ListView
- ListView+BaseAdapter的使用
- ListView 使用BaseAdapter
- Android ListView中添加不同的多种布局
- ListView的添加不同布局的item,缓存处理方法
- Android ListView使用不同对象加载不同布局
- Android学习ListView自定义布局,适配器BaseAdapter
- BaseAdapter-ListView中的item显示多种布局
- listView加载不同布局
- ListView显示不同布局
- ListView 显示不同布局
- ListView加载不同布局
- ListView加载不同布局
- Listview加载不同布局
- 判断是为魅族系统(Flyme OS)
- jsp代码页面报:javax.servlet.jsp.PageContext cannot be resolved to a type错误的解决办法
- logistic分类
- JavaScript 正则表达式对象RegExp test方法慎用/g
- @Autowired与@Resource的区别
- Listview使用BaseAdapter添加不同布局
- firefox 插件Tab Mix Plus配置截图
- MyBatis-动态SQL
- epoll
- 多线程笔记
- 标准化互信息NMI的实现源码。
- 互联网协议入门(二)
- 深入java集合学习系列-ConcurrentHashMap实现原理
- VISTA、Win Server 2008、Win7 等系统音频系统底层API