代码语言
.
CSharp
.
JS
Java
Asp.Net
C
MSSQL
PHP
Css
PLSQL
Python
Shell
EBS
ASP
Perl
ObjC
VB.Net
VBS
MYSQL
GO
Delphi
AS
DB2
Domino
Rails
ActionScript
Scala
代码分类
文件
系统
字符串
数据库
网络相关
图形/GUI
多媒体
算法
游戏
Jquery
Extjs
Android
HTML5
菜单
网页交互
WinForm
控件
企业应用
安全与加密
脚本/批处理
开放平台
其它
【
Java
】
僵硬的ListView
作者:
shenkaige
/ 发布于
2013/11/28
/
494
不可以滚动的ListView,解决在ScrollView中需要使用Listview的问题
package com.phodev.andtools.widget; import android.content.Context; import android.content.res.Resources.NotFoundException; import android.database.DataSetObserver; import android.graphics.drawable.Drawable; import android.util.AttributeSet; import android.view.View; import android.view.View.OnClickListener; import android.widget.BaseAdapter; import android.widget.ImageView; import android.widget.LinearLayout; import android.widget.ListAdapter; /** * LinearLayout模仿ListView,解决ListView在ScrollView中的不兼容问题 * * @author skg * */ public class RigidListView extends LinearLayout implements OnClickListener { private BaseAdapter mAdapter; private OnItemClickListener onItemClickListener; private Drawable dividerDrawable; private int dividerResId = android.R.drawable.divider_horizontal_dim_dark; private int itemSelectorDrawableResId = android.R.drawable.list_selector_background; /** * 绑定布局 */ private void bindLinearLayout() { removeAllChild(); int count = mAdapter.getCount(); for (int i = 0; i < count; i++) { View v = mAdapter.getView(i, null, null); v.setLayoutParams(new LayoutParams(LayoutParams.FILL_PARENT, LayoutParams.FILL_PARENT)); // LinearLayout itemContainer = new LinearLayout(getContext()); itemContainer.setLayoutParams(new LayoutParams( LayoutParams.FILL_PARENT, LayoutParams.WRAP_CONTENT)); // 添加Item的View itemContainer.addView(v); // 设置Divider itemContainer.setBackgroundResource(itemSelectorDrawableResId); itemContainer.setOrientation(LinearLayout.VERTICAL); itemContainer.setId(i); itemContainer.setClickable(true); if (onItemClickListener != null) { itemContainer.setOnClickListener(this); } itemContainer.setFocusable(true); Drawable divider = getDivider(); if (divider != null) { ImageView line = new ImageView(getContext()); line.setBackgroundDrawable(dividerDrawable); itemContainer.addView(line); } addView(itemContainer, i); } } public RigidListView(Context context) { super(context); init(context); } public RigidListView(Context context, AttributeSet attrs) { super(context, attrs); init(context); } private void init(Context context) { this.setOrientation(LinearLayout.VERTICAL); } /** * 不设置的话使用默认的,0表示不使用任何Divider * * @param resId */ public void setDivider(int resId) { dividerResId = resId; } public void setItemSelector(int resId) { itemSelectorDrawableResId = resId; } private Drawable getDivider() { if (dividerDrawable == null && dividerResId != 0) { try { dividerDrawable = getContext().getResources().getDrawable( dividerResId); } catch (NotFoundException e) { e.printStackTrace(); } } return dividerDrawable; } /** * 获取Adapter * * @return adapter */ public ListAdapter getAdpater() { return mAdapter; } /** * 设置数据 * * @param adpater */ public void setAdapter(BaseAdapter adpater) { mAdapter = adpater; mAdapter.registerDataSetObserver(dataSetObserver); bindLinearLayout(); } /** * 设置点击事件,OnItemClickListener不同于ListView的监听,这个监听必须在setAdapter之前才有效 * * @param onItemClickListener */ public void setOnItemClickListener(OnItemClickListener onItemClickListener) { this.onItemClickListener = onItemClickListener; } public interface OnItemClickListener { public void onItemClick(View view, ListAdapter adpater, int position); } @Override public void onClick(View v) { if (onItemClickListener != null) { onItemClickListener.onItemClick(v, mAdapter, v.getId()); } } private DataSetObserver dataSetObserver = new RigidDataSetObserver(); public class RigidDataSetObserver extends DataSetObserver { @Override public void onChanged() { refreshUI(); } @Override public void onInvalidated() { refreshUI(); } } /** * 刷新UI */ private void refreshUI() { bindLinearLayout(); } private void removeAllChild() { if (this.getChildCount() > 0) { removeAllViews(); } } }
试试其它关键字
ListView
同语言下
.
List 切割成几份 工具类
.
一行一行读取txt的内容
.
Java PDF转换成图片并输出给前台展示
.
java 多线程框架
.
double类型如果小数点后为零则显示整数否则保留两位小
.
将图片转换为Base64字符串公共类抽取
.
sqlParser 处理SQL(增删改查) 替换schema 用于多租户
.
JAVA 月份中的第几周处理 1-7属于第一周 依次类推 29-
.
java计算两个经纬度之间的距离
.
输入时间参数计算年龄
可能有用的
.
C#实现的html内容截取
.
List 切割成几份 工具类
.
SQL查询 多列合并成一行用逗号隔开
.
一行一行读取txt的内容
.
C#动态修改文件夹名称(FSO实现,不移动文件)
.
c# 移动文件或文件夹
.
c#图片添加水印
.
Java PDF转换成图片并输出给前台展示
.
网站后台修改图片尺寸代码
.
处理大图片在缩略图时的展示
shenkaige
贡献的其它代码
(
1
)
.
僵硬的ListView
Copyright © 2004 - 2024 dezai.cn. All Rights Reserved
站长博客
粤ICP备13059550号-3