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的坑 线性布局的坑的更多相关文章

  1. Header,Tab,ListView三个在线性布局中,ListView向上滑动时,Tab标签悬停在顶部,然后Header向上滑出去,这个效果的做法

    效果如图: 这个效果可以用一个框架来做,首先在网上搜关键字,然后搜索的结果在这里:http://stackoverflow.com/questions/20906964/viewpager-with- ...

  2. Android精通:View与ViewGroup,LinearLayout线性布局,RelativeLayout相对布局,ListView列表组件

    UI的描述 对于Android应用程序中,所有用户界面元素都是由View和ViewGroup对象构建的.View是绘制在屏幕上能与用户进行交互的一个对象.而对于ViewGroup来说,则是一个用于存放 ...

  3. android listview需要呈现多个布局

    android listview需要呈现多个布局 之前的做法很笨 在getView()方法里面,不仅将viewHolder作为tag属性设置给convertView 还将当前的position作为ta ...

  4. Android-RelativeLayout(相对布局)、LinearLayout(线性布局)

    RelativeLayout(相对布局):按照各子元素之间的位置关系完成布局. 定位:android:layout_above="@id/xxx" --将控件置于给定ID控件之上 ...

  5. Android-LinearLayout(线性布局)

    布局:Android为我们提供了一个View和ViewGroup子类的集合.ViewGroup类是View的子类,也被称为Layout布局,它提供了流式布局.线性布局等多种布局方式.View是绘制在屏 ...

  6. android—-线性布局

    android五大布局之线性布局. 1.线性布局的特点:各个子元素彼此连接,中间不留空白 而今天我们要讲解的就是第一个布局,LinearLayout(线性布局),我们屏幕适配的使用 用的比较多的就是L ...

  7. android学习之线性布局

    效图如下 移通152余继彪 该布局使用了线性布局完成 父布局为线性布局,黄色和灰色部分为水平的线性布局,剩余50%部分为水平线性布局,该布局中包含了两个垂直的线性布局分别占了三分之1和三分之二

  8. android开发------编写用户界面之线性布局

    一个好的应用程序离不开人性化的用户界面.在学习其他东西之前.理应先学习编写程序的布局(外观) 今天,我们就来学习android的UI布局----LinearLayout. LinearLayout,即 ...

  9. Android课程---布局管理器中的线性布局

    线性布局实例: <?xml version="1.0" encoding="utf-8"?><LinearLayout xmlns:andro ...

随机推荐

  1. python模块详解 sys shutil

    sys模块 sys.argv 命令行参数List,第一个元素是程序本身路径 sys.exit(n) 退出程序,正常退出时exit(0) sys.version 获取Python解释程序的版本信息 sy ...

  2. HttpWebRequest Post请求webapi

    1.WebApi设置成Post请求在方法名加特性[HttpPost]或者方法名以Post开头如下截图: 2.使用(服务端要与客户端对应起来)[单一字符串方式]:注意:ContentType = &qu ...

  3. PAT1137

    题意 一个学生的成绩由上机,期中,期末共3部分构成,现要求找出有资格获得证书的同学们. 证书获得者要求:上机分至少200,最终成绩及格. 最终成绩的生成规则:若期中分>期末分,则f = 期中 * ...

  4. MySQL数据库实验二:单表查询

    实验二   单表查询 一.实验目的 理解SELECT语句的操作和基本使用方法. 二.实验环境 是MS SQL SERVER 2005的中文客户端. 三.实验示例 1.查询全体学生的姓名.学号.所在系. ...

  5. AJAX(三):GET与POST

    1.使用场景get是最常见的请求类型,最常用于向服务器查询某些信息仅次于get的是post请求,通常用于向服务器发送应该被保存的数据 2.使用get请求经常会发生一个错误,就是查询字符串的个是有问题, ...

  6. veritas.com常用资源汇总

    NetBackup 8.1.2文档(合集) https://www.veritas.com/support/en_US/article.100044086   NetBackup产品组停止支持生命周期 ...

  7. numpy中生成随机矩阵并打印出矩阵的shape

    from numpy import * c=zeros((4,5)) print c.shape print numpy.random.random((2,3))

  8. Java 类加载体系之 ClassLoader 双亲委托机制

    Java 类加载体系之 ClassLoader 双亲委托机制 java 是一种类型安全的语言,它有四类称为安全沙箱机制的安全机制来保证语言的安全性,这四类安全沙箱分别是: 类加载体系 .class文件 ...

  9. 创建git及其初始化

    创建一个版本库非常简单,首先,选择一个合适的地方,创建一个空目录: $ mkdir learngit $ cd learngit $ pwd /Users/michael/learngit 初始化一个 ...

  10. 【Java-POJO-设计模式】JavaEE中的POJO与设计模式中多态继承的冲突

    最近看<重构>谈到利用OO的多态来优化 if else 和 switch 分支语句,但是我发现OO语法中的多态在使用框架的JavaEE中是无法实践的.对此,我感到十分的疑惑,加之之前项目中 ...