Android 解决ListView 和 ScrollView 共存冲突的问题.doc

上传人:M****1 文档编号:558948652 上传时间:2022-11-10 格式:DOC 页数:10 大小:59KB
返回 下载 相关 举报
Android 解决ListView 和 ScrollView 共存冲突的问题.doc_第1页
第1页 / 共10页
Android 解决ListView 和 ScrollView 共存冲突的问题.doc_第2页
第2页 / 共10页
Android 解决ListView 和 ScrollView 共存冲突的问题.doc_第3页
第3页 / 共10页
Android 解决ListView 和 ScrollView 共存冲突的问题.doc_第4页
第4页 / 共10页
Android 解决ListView 和 ScrollView 共存冲突的问题.doc_第5页
第5页 / 共10页
点击查看更多>>
资源描述

《Android 解决ListView 和 ScrollView 共存冲突的问题.doc》由会员分享,可在线阅读,更多相关《Android 解决ListView 和 ScrollView 共存冲突的问题.doc(10页珍藏版)》请在金锄头文库上搜索。

1、问题症状:ListView 与 ScrollView 同在一界面会导致ListView 显示变形,因为ListView 也有自带的滚动事件,故无法与ScrollView 相容,可能造成的现象是ListView 只能显示一行或者两行解决步骤: 1、继承LinearLayout,既然会冲突那就不用ListView 改成线性布局做动态布局效果 2、继承BaseAdapter ,可以参照一下Android app源码中 Widget 目录下的SimpleAdapter 为前面扩展的LinearLayout做数据。 3、模拟数据填充扩展后的BaseAdapter 为扩展后的LinearLayout 加载

2、数据第一步:新建LinearLayoutForListView 类使其扩展LinearLayout重写以下两个方法:public LinearLayoutForListView(Context context) super(context);public LinearLayoutForListView(Context context, AttributeSet attrs) super(context, attrs);/ TODO Auto-generated constructor stub这两个方法可选,不过建议都写上,第一个方法可以让我们通过 编程的方式 实例化出来,第二个方法可以允许我

3、们通过 XML的方式注册 控件,可以在第二个方法里面为扩展的复合组件加属性,详细使用方法请点击这里。为其添加get / set 方法/* 获取Adapter* return adapter*/public AdapterForLinearLayout getAdpater() return adapter;/* 设置数据* param adpater*/public void setAdapter(AdapterForLinearLayout adpater) this.adapter = adpater;bindLinearLayout();/* 获取点击事件* return*/public

4、 OnClickListener getOnclickListner() return onClickListener;/* 设置点击事件* param onClickListener*/public void setOnclickLinstener(OnClickListener onClickListener) this.onClickListener = onClickListener;第二步:新建AdapterForLinearLayout 类继承自BaseAdapter,并为其添加构造函数private LayoutInflater mInflater;private int res

5、ource;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) con

6、text.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

7、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*/pri

8、vate 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 做相应处理,具体如何操作读者可另行测试。

9、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.LinearLa

10、yout;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.setOnClic

11、kListener(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);/ T

12、ODO 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(OnC

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 生活休闲 > 社会民生

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号