ListView Viewholder的坑 线性布局的坑
1。ListView Viewholder的坑
/**
* 默认带图片的menu adapter
*/
public static class MenuImageAdapter extends BaseAdapter {
private List<Aliquot> mDataSet;
private Context mContext;
public MenuImageAdapter(List<Aliquot> dataSet, Context context) {
this.mDataSet = dataSet;
this.mContext = context;
}
@Override
public int getCount() {
return mDataSet == null ? 0 : mDataSet.size();
}
@Override
public Object getItem(int position) {
return mDataSet.get(position);
}
@Override
public long getItemId(int position) {
return position;
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
MenuImageHolder holder = null;
Aliquot aliquot = mDataSet.get(position);
if (convertView == null) {
holder = new MenuImageHolder();
convertView = LayoutInflater.from(mContext).inflate(DEF_TEXT_IMAGE_ITEM_RES, null);
holder.mImageViewLeft = (ImageView) convertView.findViewById(R.id.img_menu_dialog_left);
holder.mImageViewRight = (ImageView) convertView.findViewById(R.id.img_menu_dialog_right);
holder.mParentRl = (RelativeLayout) convertView.findViewById(R.id.dialog_menu_parent_rl);
holder.mTextView = (TextView) convertView.findViewById(R.id.tv_menu_dialog);
holder.mVline = (View) convertView.findViewById(R.id.shelf_dilog_item_v_line);
convertView.setTag(holder);
} else {
holder = (MenuImageHolder) convertView.getTag();
}
if (aliquot.mSrcLeftDrawableId != 0) {
holder.mImageViewLeft.setImageResource(aliquot.mSrcLeftDrawableId);
holder.mImageViewLeft.setVisibility(View.VISIBLE);
LinearLayout.LayoutParams params = (LinearLayout.LayoutParams) holder.mParentRl.getLayoutParams();
params.setMargins(15,0,0,0);
}else{
holder.mImageViewLeft.setVisibility(View.GONE);
}
if (aliquot.mSrcRightDrawableId != 0) {
holder.mImageViewRight.setImageResource(aliquot.mSrcRightDrawableId);
holder.mImageViewRight.setVisibility(View.VISIBLE);
}else{
holder.mImageViewRight.setVisibility(View.GONE);
}
// if(position == mDataSet.size()-1){
// holder.mVline.setVisibility(View.INVISIBLE);
// }else{
// holder.mVline.setVisibility(View.VISIBLE);
// }
holder.mTextView.setText(aliquot.mContent);
return convertView;
}
}
public static class MenuImageHolder {
private TextView mTextView;//文字
private ImageView mImageViewLeft;//图片在左侧
private ImageView mImageViewRight;//图片在右侧
private RelativeLayout mParentRl;
private View mVline;//分割线
}
其中:
if (aliquot.mSrcLeftDrawableId != 0) {
holder.mImageViewLeft.setImageResource(aliquot.mSrcLeftDrawableId);
holder.mImageViewLeft.setVisibility(View.VISIBLE);
LinearLayout.LayoutParams params = (LinearLayout.LayoutParams) holder.mParentRl.getLayoutParams();
params.setMargins(15,0,0,0);
}else{
holder.mImageViewLeft.setVisibility(View.GONE);
}
如果这里没有else的话,就会导致你的holder.mImageViewLeft 显示出来。因为你holder重用了嘛,用了holder之后,记得改状态。
2。线性布局的坑
水平线性布局如果被其中一个元素布满了(match_paraent),那么你写的后面的元素都不会显示出来了。
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="@dimen/dialog_menutype_item_height"
android:gravity="center_vertical"
android:paddingLeft="@dimen/dialog_padding_left"
android:orientation="horizontal">
<ImageView
android:id="@+id/img_menu_dialog_left"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
/>
<RelativeLayout
android:id="@+id/dialog_menu_parent_rl"
android:layout_width="match_parent"
android:layout_height="@dimen/dialog_menutype_item_height"
android:layout_marginLeft="15dp"
>
<TextView
android:id="@+id/tv_menu_dialog"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_centerVertical="true"
android:textSize="15sp"
android:textColor="@color/primary_color_1"
/>
<View
android:id="@+id/shelf_dilog_item_v_line"
android:layout_width="match_parent"
android:layout_height="2px"
android:visibility="gone"
android:layout_alignParentBottom="true"
android:background="@color/zz_black_10_percent_transparent"
></View>
</RelativeLayout>
<ImageView
android:id="@+id/img_menu_dialog_right"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
/>
</LinearLayout>
这个布局中id 为img_menu_dialog_right的元素永远也显示不出来。坑死我了,我开始没有意识到这个简单的问题。
ListView Viewholder的坑 线性布局的坑的更多相关文章
- Header,Tab,ListView三个在线性布局中,ListView向上滑动时,Tab标签悬停在顶部,然后Header向上滑出去,这个效果的做法
效果如图: 这个效果可以用一个框架来做,首先在网上搜关键字,然后搜索的结果在这里:http://stackoverflow.com/questions/20906964/viewpager-with- ...
- Android精通:View与ViewGroup,LinearLayout线性布局,RelativeLayout相对布局,ListView列表组件
UI的描述 对于Android应用程序中,所有用户界面元素都是由View和ViewGroup对象构建的.View是绘制在屏幕上能与用户进行交互的一个对象.而对于ViewGroup来说,则是一个用于存放 ...
- android listview需要呈现多个布局
android listview需要呈现多个布局 之前的做法很笨 在getView()方法里面,不仅将viewHolder作为tag属性设置给convertView 还将当前的position作为ta ...
- Android-RelativeLayout(相对布局)、LinearLayout(线性布局)
RelativeLayout(相对布局):按照各子元素之间的位置关系完成布局. 定位:android:layout_above="@id/xxx" --将控件置于给定ID控件之上 ...
- Android-LinearLayout(线性布局)
布局:Android为我们提供了一个View和ViewGroup子类的集合.ViewGroup类是View的子类,也被称为Layout布局,它提供了流式布局.线性布局等多种布局方式.View是绘制在屏 ...
- android—-线性布局
android五大布局之线性布局. 1.线性布局的特点:各个子元素彼此连接,中间不留空白 而今天我们要讲解的就是第一个布局,LinearLayout(线性布局),我们屏幕适配的使用 用的比较多的就是L ...
- android学习之线性布局
效图如下 移通152余继彪 该布局使用了线性布局完成 父布局为线性布局,黄色和灰色部分为水平的线性布局,剩余50%部分为水平线性布局,该布局中包含了两个垂直的线性布局分别占了三分之1和三分之二
- android开发------编写用户界面之线性布局
一个好的应用程序离不开人性化的用户界面.在学习其他东西之前.理应先学习编写程序的布局(外观) 今天,我们就来学习android的UI布局----LinearLayout. LinearLayout,即 ...
- Android课程---布局管理器中的线性布局
线性布局实例: <?xml version="1.0" encoding="utf-8"?><LinearLayout xmlns:andro ...
随机推荐
- python模块详解 sys shutil
sys模块 sys.argv 命令行参数List,第一个元素是程序本身路径 sys.exit(n) 退出程序,正常退出时exit(0) sys.version 获取Python解释程序的版本信息 sy ...
- HttpWebRequest Post请求webapi
1.WebApi设置成Post请求在方法名加特性[HttpPost]或者方法名以Post开头如下截图: 2.使用(服务端要与客户端对应起来)[单一字符串方式]:注意:ContentType = &qu ...
- PAT1137
题意 一个学生的成绩由上机,期中,期末共3部分构成,现要求找出有资格获得证书的同学们. 证书获得者要求:上机分至少200,最终成绩及格. 最终成绩的生成规则:若期中分>期末分,则f = 期中 * ...
- MySQL数据库实验二:单表查询
实验二 单表查询 一.实验目的 理解SELECT语句的操作和基本使用方法. 二.实验环境 是MS SQL SERVER 2005的中文客户端. 三.实验示例 1.查询全体学生的姓名.学号.所在系. ...
- AJAX(三):GET与POST
1.使用场景get是最常见的请求类型,最常用于向服务器查询某些信息仅次于get的是post请求,通常用于向服务器发送应该被保存的数据 2.使用get请求经常会发生一个错误,就是查询字符串的个是有问题, ...
- veritas.com常用资源汇总
NetBackup 8.1.2文档(合集) https://www.veritas.com/support/en_US/article.100044086 NetBackup产品组停止支持生命周期 ...
- numpy中生成随机矩阵并打印出矩阵的shape
from numpy import * c=zeros((4,5)) print c.shape print numpy.random.random((2,3))
- Java 类加载体系之 ClassLoader 双亲委托机制
Java 类加载体系之 ClassLoader 双亲委托机制 java 是一种类型安全的语言,它有四类称为安全沙箱机制的安全机制来保证语言的安全性,这四类安全沙箱分别是: 类加载体系 .class文件 ...
- 创建git及其初始化
创建一个版本库非常简单,首先,选择一个合适的地方,创建一个空目录: $ mkdir learngit $ cd learngit $ pwd /Users/michael/learngit 初始化一个 ...
- 【Java-POJO-设计模式】JavaEE中的POJO与设计模式中多态继承的冲突
最近看<重构>谈到利用OO的多态来优化 if else 和 switch 分支语句,但是我发现OO语法中的多态在使用框架的JavaEE中是无法实践的.对此,我感到十分的疑惑,加之之前项目中 ...