需要在一个界面里放置超出屏幕容量的内容,需要用到ScrollView实现滚屏;想要将内容以列表的形式动态展示,需要用到ListView。但是如果想要在一个界面中使用多个列表,并实现整体滚屏,那么ScrollView和ListView共用的时候会出现UI问题,无法实现想要的效果。具体原因就不清楚了,至少在2.1以下是有问题的,应该算是Android的一个bug吧。
其实要实现这样的一个效果也并不难,不过不能直接使用ListView,而需要自己定义一个列表布局,并实现其Adapter设置相关的方法来实现。于是我实现了一个继承自LinearLayout的类LinearLayoutForListView,并添加Adapter相关方法,实现这一功能。
package com.mozitek.epg.android.widget;
import android.content.Context;
import android.util.AttributeSet;
import android.util.Log;
import android.view.View;
import android.widget.LinearLayout;
import android.widget.ListAdapter;
public class LinearLayoutForListView extends LinearLayout {
private ListAdapter adapter;
private OnClickListener onClickListener = null;
private OnTouchListener onTouchListener = null;
/**
* 绑定布局
*/
public void bindLinearLayout() {
int count = adapter.getCount();
for (int i = 0; i < count; i++) {
View v = adapter.getView(i, null, null);
//v.setLayoutParams(new LayoutParams(LayoutParams.FILL_PARENT,
//LayoutParams.WRAP_CONTENT));
v.setOnTouchListener(this.onTouchListener);
v.setOnClickListener(this.onClickListener);
v.setId(i);
addView(v, i);
}
Log.v("countTAG", "" + count);
}
public LinearLayoutForListView(Context context) {
super(context);
}
public LinearLayoutForListView(Context context, AttributeSet attrs) {
super(context, attrs);
}
/**
* 获取Adapter
*
* @return adapter
*/
public ListAdapter getAdpater() {
return adapter;
}
/**
* 设置数据
*
* @param adpater
*/
public void setAdapter(ListAdapter adpater) {
this.adapter = adpater;
bindLinearLayout();
}
/**
* 获取点击事件
*
* @return
*/
public OnClickListener getOnclickListner() {
return onClickListener;
}
/**
* 设置点击事件
*
* @param onClickListener
*/
public void setOnclickLinstener(OnClickListener onClickListener) {
this.onClickListener = onClickListener;
}
public OnTouchListener getOnTouchListener() {
return onTouchListener;
}
public void setOnTouchListener(OnTouchListener onTouchListener) {
this.onTouchListener = onTouchListener;
}
}
其实要实现这样的一个效果也并不难,不过不能直接使用ListView,而需要自己定义一个列表布局,并实现其Adapter设置相关的方法来实现。于是我实现了一个继承自LinearLayout的类LinearLayoutForListView,并添加Adapter相关方法,实现这一功能。
package com.mozitek.epg.android.widget;
import android.content.Context;
import android.util.AttributeSet;
import android.util.Log;
import android.view.View;
import android.widget.LinearLayout;
import android.widget.ListAdapter;
public class LinearLayoutForListView extends LinearLayout {
private ListAdapter adapter;
private OnClickListener onClickListener = null;
private OnTouchListener onTouchListener = null;
/**
* 绑定布局
*/
public void bindLinearLayout() {
int count = adapter.getCount();
for (int i = 0; i < count; i++) {
View v = adapter.getView(i, null, null);
//v.setLayoutParams(new LayoutParams(LayoutParams.FILL_PARENT,
//LayoutParams.WRAP_CONTENT));
v.setOnTouchListener(this.onTouchListener);
v.setOnClickListener(this.onClickListener);
v.setId(i);
addView(v, i);
}
Log.v("countTAG", "" + count);
}
public LinearLayoutForListView(Context context) {
super(context);
}
public LinearLayoutForListView(Context context, AttributeSet attrs) {
super(context, attrs);
}
/**
* 获取Adapter
*
* @return adapter
*/
public ListAdapter getAdpater() {
return adapter;
}
/**
* 设置数据
*
* @param adpater
*/
public void setAdapter(ListAdapter adpater) {
this.adapter = adpater;
bindLinearLayout();
}
/**
* 获取点击事件
*
* @return
*/
public OnClickListener getOnclickListner() {
return onClickListener;
}
/**
* 设置点击事件
*
* @param onClickListener
*/
public void setOnclickLinstener(OnClickListener onClickListener) {
this.onClickListener = onClickListener;
}
public OnTouchListener getOnTouchListener() {
return onTouchListener;
}
public void setOnTouchListener(OnTouchListener onTouchListener) {
this.onTouchListener = onTouchListener;
}
}