读书人

ScrollView上ListView生存之道

发布时间: 2012-09-10 22:20:12 作者: rapoo

ScrollView下,ListView生存之道

首先讲一下我遇到的需求吧,页面是这样的,上边有东西,中间是列表,下边还有东西。首先我看到列表立刻就想到了用ListView,但是页面有限,只能用ScrollView包一下。想到就做呗。我就在ScrollView里面加了一个ListView, ListView设置的是wapcontent,这样就出现了ListView数据只显示出了一行。好的,解决问题的方案就来了。

一.设置scrollView中的ListView内容全部显示,不能滑动,将滑动交给scrollView去做

做法:在设置adapter之前,重新计算ListView的高度,我这里写了一个方法:

public class MyListView  extends LinearLayout{private BaseAdapter adapter;private MyOnItemClickListener onItemClickListener;boolean footerViewAttached = false;private View footerview;/** * 通知更新listview */public void notifyChange() {int count = getChildCount();if (footerViewAttached) {count--;}LayoutParams params = new LayoutParams(LayoutParams.FILL_PARENT, LayoutParams.WRAP_CONTENT);for (int i = count; i < adapter.getCount(); i++) {final int index = i;final LinearLayout layout = new LinearLayout(getContext());layout.setLayoutParams(params);layout.setOrientation(VERTICAL);View v = adapter.getView(i, null, null);v.setOnClickListener(new OnClickListener() {@Overridepublic void onClick(View v) {if (onItemClickListener != null) {onItemClickListener.onItemClick(MyListView.this, layout, index,adapter.getItem(index));}}});ImageView imageView = new ImageView(getContext());imageView.setBackgroundResource(R.drawable.divider_list);imageView.setLayoutParams(params);layout.addView(v);layout.addView(imageView);addView(layout, index);}}public MyListView(Context context) {super(context);initAttr(null);}public MyListView(Context context, AttributeSet attrs) {super(context, attrs);initAttr(attrs);}public void initAttr(AttributeSet attrs) {setOrientation(VERTICAL);}/** * 初始化footerview *  * @param footerView */public void initFooterView(final View footerView) {this.footerview = footerView;}/** * 设置footerView监听事件 *  * @param onClickListener */public void setFooterViewListener(OnClickListener onClickListener) {this.footerview.setOnClickListener(onClickListener);}public BaseAdapter getAdapter() {return adapter;}/** * 设置adapter并模拟listview添加????数据 *  * @param adpater */public void setAdapter(BaseAdapter adpater) {this.adapter = adpater;removeAllViews();if (footerViewAttached)addView(footerview);notifyChange();}/** * 设置条目监听事件 *  * @param onClickListener */public void setOnItemClickListener(MyOnItemClickListener onClickListener) {this.onItemClickListener = onClickListener;}/** * 没有下一页了 */public void noMorePages() {if (footerview != null && footerViewAttached) {removeView(footerview);footerViewAttached = false;}}/** * 可能还有下一?? */public void mayHaveMorePages() {if (!footerViewAttached && footerview != null) {addView(footerview);footerViewAttached = true;}}public static interface MyOnItemClickListener {public void onItemClick(ViewGroup parent, View view, int position, Object o);}}

这样就可以添加footerView了。最终我是使用了这种方案。






1楼woshicuihu3天前 10:15
牛逼 牛逼 牛逼 牛逼 牛逼 牛逼 牛逼 牛逼 牛逼 牛逼 牛逼 牛逼 牛逼 牛逼 牛逼 牛逼 牛逼

读书人网 >移动开发

热点推荐