已阅读5页,还剩5页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
问题症状:ListView 与 ScrollView 同在一界面会导致ListView 显示变形,因为ListView 也有自带的滚动事件,故无法与ScrollView 相容,可能造成的现象是ListView 只能显示一行或者两行解决步骤: 1、继承LinearLayout,既然会冲突那就不用ListView 改成线性布局做动态布局效果 2、继承BaseAdapter ,可以参照一下Android app源码中 Widget 目录下的SimpleAdapter 为前面扩展的LinearLayout做数据。 3、模拟数据填充扩展后的BaseAdapter 为扩展后的LinearLayout 加载数据第一步:新建LinearLayoutForListView 类使其扩展LinearLayout重写以下两个方法:public LinearLayoutForListView(Context context) super(context);public LinearLayoutForListView(Context context, AttributeSet attrs) super(context, attrs);/ TODO Auto-generated constructor stub这两个方法可选,不过建议都写上,第一个方法可以让我们通过 编程的方式 实例化出来,第二个方法可以允许我们通过 XML的方式注册 控件,可以在第二个方法里面为扩展的复合组件加属性,详细使用方法请点击这里。为其添加get / set 方法/* 获取Adapter* return adapter*/public AdapterForLinearLayout getAdpater() return adapter;/* 设置数据* param adpater*/public void setAdapter(AdapterForLinearLayout adpater) this.adapter = adpater;bindLinearLayout();/* 获取点击事件* return*/public OnClickListener getOnclickListner() return onClickListener;/* 设置点击事件* param onClickListener*/public void setOnclickLinstener(OnClickListener onClickListener) this.onClickListener = onClickListener;第二步:新建AdapterForLinearLayout 类继承自BaseAdapter,并为其添加构造函数private LayoutInflater mInflater;private int resource;private List? extends Map data;private String from;private int to;public AdapterForLinearLayout(Context context,List? extends Map data, int resouce, String from,int to) this.data = data;this.resource = resouce;this.data = data;this.from = from;this.to = to;this.mInflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);此构造函数模仿 simpleAdapter 通过传进来的resouce 为布局设置数据。通过继承BaseAdapter 重要的实现方法在下面getView ,此方法判断通过传进来的 String from 与 int to 为分别查找出View 并为View 设置相应的Text,代码如下:Overridepublic View getView(int position, View convertView, ViewGroup parent) / TODO Auto-generated method stubconvertView = mInflater.inflate(resource, null);Map item = data.get(position);int count = to.length;for (int i = 0; i count; i+) View v = convertView.findViewById(toi);bindView(v, item, fromi);convertView.setTag(position);return convertView;/* 绑定视图* param view* param item* param from*/private void bindView(View view, Map item, String from) Object data = item.get(from);if (view instanceof TextView) (TextView) view).setText(data = null ? : data.toString();Tip: BindView 方法是一个自定义方法,在方法体内可以为通过判断使本类更具灵活性,如上,你不仅可以判断是TextView 并且可以传入任何你想要的View 只要在方法体内加入相应判断即可,数据可以通过data 做相应处理,具体如何操作读者可另行测试。 convertView.setTag(position); 此句代码为View 设置tag 在以后我们可以通过 getTag 找出下标,后文有介绍如何通过下标操作数据。下面是两个类的全部代码,读者可以无须更改直接使用:LinearLayoutForListViewpackage com.terry.widget;import android.content.Context;import android.util.AttributeSet;import android.util.Log;import android.view.View;import android.widget.LinearLayout;public class LinearLayoutForListView extends LinearLayout private AdapterForLinearLayout adapter;private OnClickListener onClickListener = null;/* 绑定布局*/public void bindLinearLayout() int count = adapter.getCount();for (int i = 0; i count; i+) View v = adapter.getView(i, null, null);v.setOnClickListener(this.onClickListener);if (i = count - 1) LinearLayout ly = (LinearLayout) v;ly.removeViewAt(2);addView(v, i);Log.v(countTAG, + count);public LinearLayoutForListView(Context context) super(context);public LinearLayoutForListView(Context context, AttributeSet attrs) super(context, attrs);/ TODO Auto-generated constructor stub/* 获取Adapter* return adapter*/public AdapterForLinearLayout getAdpater() return adapter;/* 设置数据* param adpater*/public void setAdapter(AdapterForLinearLayout adpater) this.adapter = adpater;bindLinearLayout();/* 获取点击事件* return*/public OnClickListener getOnclickListner() return onClickListener;/* 设置点击事件* param onClickListener*/public void setOnclickLinstener(OnClickListener onClickListener) this.onClickListener = onClickListener;AdapterForLinearLayoutpackage com.terry.widget;import java.util.List;import java.util.Map;import android.content.Context;import android.view.LayoutInflater;import android.view.View;import android.view.ViewGroup;import android.widget.BaseAdapter;import android.widget.TextView;public class AdapterForLinearLayout extends BaseAdapter private LayoutInflater mInflater;private int resource;private List? extends Map data;private String from;private int to;public AdapterForLinearLayout(Context context,List? extends Map data, int resouce, String from,int to) this.data = data;this.resource = resouce;this.data = data;this.from = from;this.to = to;this.mInflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);Overridepublic int getCount() / TODO Auto-generated method stubreturn data.size();Overridepublic Object getItem(int position) / TODO Auto-generated method stubreturn data.get(position);SuppressWarnings(unchecked)public String get(int position, Object key) Map map = (Map) getItem(position);return map.get(key).toString();Overridepublic long getItemId(int position) / TODO Auto-generated method stubreturn position;Overridepublic View getView(int position, View convertView, ViewGroup parent) / TODO Auto-generated method stubconvertView = mInflater.inflate(resource, null);Map item = data.get(position);int count = to.length;for (int i = 0; i count; i+) View v = convertView.findViewById(toi);bindView(v, item, fromi);convertView.setTag(position);return convertView;/* 绑定视图* param view* param item* param from*/private void bindView(View view, Map item, String from) Object data = item.get(from);if (view instanceof TextView) (TextView) view).setText(data = null ? : data.toString();对应的XML 如下:第三步:主页面使用控件并为其设置数据 XML如下: 加载数据如下:lv = (LinearLayoutForListView) findViewById(R.id.ListView01);for (int i = 0; i
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2026年能源加工公司财务基本制度管理总则
- 2025珠海市斗门区委组织部招聘2名普通雇员易考易错模拟试题(共500题)试卷后附参考答案
- 数据要素保险机制:“十五五”风险分散新路径
- 2025湖南长沙市社会科学界联合会招聘普通雇员1人易考易错模拟试题(共500题)试卷后附参考答案
- 体育产品:利用微生态产品吸引消费者
- 2025湖南株洲市人民政府办公室招聘易考易错模拟试题(共500题)试卷后附参考答案
- 2025湖北咸宁市咸安区事业单位招聘工作人员易考易错模拟试题(共500题)试卷后附参考答案
- 2025海南省三亚市事业单位招考易考易错模拟试题(共500题)试卷后附参考答案
- 2025浙江明州测绘院招聘2人易考易错模拟试题(共500题)试卷后附参考答案
- 2025浙江台州市黄岩站场管理服务限公司招聘5人易考易错模拟试题(共500题)试卷后附参考答案
- 2025年行政执法人员考试题库(附参考答案)
- 2025锦泰财产保险股份有限公司招聘理赔管理岗等岗位54人笔试考试备考题库及答案解析
- DB63 T1686-2018青海省生土砌体房屋技术导则地标
- 电杆安装安全培训课件
- 2025年全国高校辅导员素质能力大赛考试测试题(附答案)(共三套)
- 2025湖北省楚天云有限公司校园招聘18人笔试历年难易错考点试卷带答案解析2套试卷
- 高压氧治疗健康宣教
- 数字化财务转型与智能财务应用
- 2025年KET词汇表表格
- 微信表情包设计市场分析
- 电工(初级)考试题及答案(完整版)
评论
0/150
提交评论