scrollview嵌套listview,gridview时使用自定义listview或gridview
来源:互联网 发布:淘宝口令转换器 编辑:程序博客网 时间:2024/05/06 18:32
scrollview嵌套listview,gridview时,listview的apapter的getview方法会被调用多次,如果getview中存在图片下载的逻辑则耗费流量,因此写一个简单的自定义view来代替。
public class LinearGridView extends LinearLayout {
private Context mContext;
private int mostColomn = 4;
private BaseAdapter adapter;
private OnItemClickListener listener;
private List<View> viewList;
public final int INVALITE = -1;
private int spaceEnd = INVALITE;
private int spaceWidth = INVALITE;// 每项之间的间隔
private DataSetObserver observer = new DataSetObserver() {
public void onChanged() {
if( adapter != null ) {
LinearGridView.this.removeAllViews();
initView();
}
};
};
private static final String tag = "LinearGridView";
/**
* @param 设置每一项之间的间隔大小
* ,在setadapter之前调用生效
*/
public void setSpaceWidth( int spaceWidth ) {
this.spaceWidth = spaceWidth;
}
/**
* addSpaceView 添加每一项之间的间隔 void
*
* @exception
* @since 3.0
*/
private void addSpaceView() {
View spaceView = new View( mContext );
spaceView.setBackgroundColor( getResources().getColor( android.R.color.transparent ) );
addView( spaceView, 1 );
LayoutParams mLayoutParams = ( LayoutParams )spaceView.getLayoutParams();
mLayoutParams.width = getResources().getDimensionPixelSize( spaceWidth );
mLayoutParams.height = LayoutParams.WRAP_CONTENT;
}
/**
* @param 是否使用空白填充gridview
*/
public void setSpaceEnd( int spaceEnd ) {
this.spaceEnd = spaceEnd;
}
/**
* mostColomn
*
* @return the mostColomn
* @since 3.0
*/
public int getMostColomn() {
return mostColomn;
}
/**
* @param mostColomn
* the mostColomn to set
*/
public void setMostColomn( int mostColomn ) {
this.mostColomn = mostColomn;
}
public LinearGridView( Context context, AttributeSet attrs ) {
super( context, attrs );
mContext = context;
viewList = new ArrayList<View>();
}
public LinearGridView( Context context ) {
super( context );
mContext = context;
viewList = new ArrayList<View>();
}
public void setAdapter( BaseAdapter myAdapter ) {
adapter = myAdapter;
myAdapter.registerDataSetObserver( observer );
initView();
}
void initView() {
int weightSum = 0;
setOrientation( LinearLayout.HORIZONTAL );
int count = adapter.getCount();
LinearLayout[] mLinearLayouts = null;
weightSum = mostColomn;
setWeightSum( weightSum );
// if( count > mostColomn ) {
// setWeightSum( mostColomn );
// weightSum = mostColomn;
//
// } else {
// setWeightSum( count );
// weightSum = count;
// }
if( weightSum == 0 ) {
return;
}
mLinearLayouts = new LinearLayout[ weightSum ];
for( int i = 0; i < weightSum; i++ ) {
LinearLayout mLinearLayout = new LinearLayout( mContext );
mLinearLayout.setOrientation( LinearLayout.VERTICAL );
// mLinearLayout.setLayoutParams( new LayoutParams( 0, 0 ) );
addView( mLinearLayout );
LayoutParams params = ( LayoutParams )mLinearLayout.getLayoutParams();
params.width = 0;
params.weight = 1;
params.height = LayoutParams.WRAP_CONTENT;
mLinearLayouts[ i ] = mLinearLayout;
if( spaceWidth != INVALITE ) {
if( i != weightSum - 1 ) {
addSpaceView();
}
}
}
for( int i = 0; i < count; i++ ) {
View childView = adapter.getView( i, null, mLinearLayouts[ i % weightSum ] );
mLinearLayouts[ i % weightSum ].addView( childView );
viewList.add( childView );
}
if( spaceEnd != INVALITE ) {
LayoutInflater inflater = null;
int spaceCount = mostColomn - count % mostColomn;
if( spaceCount > mostColomn - 1 ) {
spaceCount = 0;
}
if( spaceCount != 0 ) {
inflater = LayoutInflater.from( mContext );
}
if( inflater != null ) {
for( int i = 0; i < spaceCount; i++ ) {
View spaceView = inflater.inflate( spaceEnd, null );
mLinearLayouts[ ( mostColomn - spaceCount + i ) % weightSum ].addView( spaceView );
}
}
}
initAction();
}
private void initAction() {
setOnItemClickListener( listener );
}
public void setOnItemClickListener( final OnItemClickListener onItemClickListener ) {
if( onItemClickListener == null ) {
return;
}
listener = onItemClickListener;
if( adapter != null ) {
for( int i = 0; i < adapter.getCount(); i++ ) {
final int position = i;
try {
final View childView = viewList.get( i );
childView.setOnClickListener( new OnClickListener() {
@Override
public void onClick( View v ) {
onItemClickListener.onItemClick( null, childView, position, 0 );
}
} );
} catch( Exception e ) {
}
}
}
}
- scrollview嵌套listview,gridview时使用自定义listview或gridview
- ScrollView嵌套ListView或gridview
- ScrollView嵌套Listview或GridView
- ScrollView嵌套GridView、ListView
- ScrollView嵌套ListView、GridView
- ScrollView 嵌套 ListView GridView
- ScrollView 嵌套ListView嵌套GridView或ListView卡顿
- 解决ScrollView跟ListView或GridView嵌套时的问题
- ScrollView嵌套ListView,GridView;ListView嵌套ListView,GridView;ExpanderListView嵌套...
- ScrollView中嵌套使用ListView,GridView
- ScrollView嵌套GridView和ListView
- ScrollView中嵌套ListView,GridView
- GridView ListView 嵌套 ScrollView 解决方案
- ScrollView嵌套GridView或者ListView
- ScrollView嵌套ListView和GridView
- ScrollView嵌套listview以及gridview
- ScrollView嵌套ListView,gridview问题
- ScrollView嵌套ListView、GridView冲突
- hdu3998Sequence【最长递增子序列及方法数】
- 使用广播信道的以太网
- hive 数据的导入导出
- java之JMX
- [c++] 友元详解
- scrollview嵌套listview,gridview时使用自定义listview或gridview
- 安卓Notification.Builder的使用
- CentOS下安装JDK
- 基于nodejs的简单分页的实现
- ADB问题解决(Android Debug Bridge)
- prjComps.h、prjParams.h、prjConfig.c的关系
- 二分图最大匹配,最小点覆盖,最大独立集 证明
- 树莓派2 ubuntu mate安装
- 解决maven模块化打包配置文件被过滤问题