Android中listview extends Linearlayout
来源:互联网 发布:ios天气插件数据不跟新 编辑:程序博客网 时间:2024/05/29 09:46
由于 scrollview 套 listview 会有很多问题,网上很多人用 LinearLayout 模拟 listview, 也可以设置 adapter。很多人直接继承 BaseAdapter, 可能是偷懒吧, 其实没有必要, BaseAdapter 里面有很多其它无用的方法被继承,其次 getView 等方法的签名可能不太符合, 直接定义一个接口或抽象类更好。
这种方式在界面中有很多动态 list 布局时,抽离出来可能会灵活一些。 不用在代码中每次都 for 循环,动态创建 view 再添加。如果这种动态布局不是很多的话,直接 for 循环就行, 简单点的直接扩展一下 LinearLayout 也行。当到处都是 list 动态布局时而 ListView 又不好用, 这种模拟 ListView setAdapter 的方式会灵活一些,代码复用性好一些。
- 1) 可以简单的定义一个接口供子 adapter 实现
public interface MyLinearLayoutInterface { int getCount(); Object getItem(int position); View getView(int position);}
- 2) 如果子类代码比较重复的话,也可以抽出一个基类
public abstract class LinearLayoutBaseAdapter { private List<? extends Object> list; private Context context; public LinearLayoutBaseAdapter(Context context, List<? extends Object> list) { this.context = context; this.list = list; } public LayoutInflater getLayoutInflater() { if (context != null) { return LayoutInflater.from(context); } return null; } public int getCount() { if (list != null) { return list.size(); } return 0; }; public Object getItem(int position) { if (list != null) { return list.get(position); } return null; }; /** * 供子类复写 * * @param position * @return */ abstract View getView(int position);}
- 3) 主类将 adapter 里面的 view 全部加入 LinearLayout 并设置回调监听
public class MyLinearLayoutForListView extends LinearLayout { private LinearLayoutBaseAdapter adapter; private OnItemClickListener onItemClickListener; public MyLinearLayoutForListView(Context context) { super(context); } public MyLinearLayoutForListView(Context context, AttributeSet attrs) { super(context, attrs); } public void setAdapter(LinearLayoutBaseAdapter adapter) { this.adapter = adapter; // setAdapter 时添加 view bindView(); } public void setOnItemClickListener(OnItemClickListener onItemClickListener) { this.onItemClickListener = onItemClickListener; } /** * 绑定 adapter 中所有的 view */ private void bindView() { if (adapter == null) { return; } for (int i = 0; i < adapter.getCount(); i++) { final View v = adapter.getView(i); final int tmp = i; final Object obj = adapter.getItem(i); // view 点击事件触发时回调我们自己的接口 v.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { if (onItemClickListener != null) { onItemClickListener.onItemClicked(v, obj, tmp); } } }); addView(v); } } /** * * 回调接口 */ public interface OnItemClickListener { /** * * @param v * 点击的 view * @param obj * 点击的 view 所绑定的对象 * @param position * 点击位置的 index */ public void onItemClicked(View v, Object obj, int position); }}
- 4) 前台代码
List<Info> list = new ArrayList<Info>();MyLinearLayoutForListView layout = (MyLinearLayoutForListView) findViewById(R.id.mylayout);MyAdapter adapter = new MyAdapter(this, list);layout.setAdapter(adapter);layout.setOnItemClickListener(new MyLinearLayoutForListView.OnItemClickListener() { @Override public void onItemClicked(View v, Object obj, int position) { Info info = (Info) obj; if (info != null) { // do something } }});
希望大家关注我更多的博客,我会不定期更新更多的内容,欢迎大家订阅公众号,我会不定期更新资源,供大家一起学习。
0 0
- Android中listview extends Linearlayout
- Android LinearLayout模拟ListView
- android linearlayout代替listview实现
- ListView中加入LinearLayout【一】
- ListView中加入LinearLayout【二】
- Android 中 LinearLayout
- android中extends 和implements
- linearlayout 中listview 挤占其后view位置
- ListView中加入LinearLayout listview baseadapter 的filter
- ListView中加入LinearLayout listview baseadapter 的filter
- Android linearlayout中layout_weight详解
- android中典型的LinearLayout
- android中extends 和implements的区别
- android 中extends 和 implements的理解
- android中extends 和implements的区别
- extends LinearLayout 实现侧滑菜单
- ListView 自定义item布局 android.widget.LinearLayout$LayoutParams
- ListView 自定义item布局 android.widget.LinearLayout$LayoutParams
- Tomcat负载均衡和集群环境的搭建
- NSAttribruteString详解
- 在 Mac 上安装 MIT Scheme 解释器的命令行方法
- windows下C语言枚举串口端口
- Android缓存-LruCache分析
- Android中listview extends Linearlayout
- 高级查询第一堂课
- OBIEE分析开发-动态标题
- Ubuntu 14.04下SublimeText 3支持中文输入法
- 四轴飞行器突然失控坠落原因分析与检查步骤
- request 和 response 的页面跳转
- IT人的职场该怎么走!!!
- CF_462B_ApplemanAndCardGame
- c++学习笔记 初识类与对象