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. System.Data.SqlClient.SqlException: 从 datetime2 数据类型到 datetime 数据类型的转换产生一个超出范围的值

    System.Data.SqlClient.SqlException: 从 datetime2 数据类型到 datetime 数据类型的转换产生一个超出范围的值.解决办法是: 而这位大哥提出的解决办法 ...

  2. selenium 上传文件。

    上传文件 driver.findElement(By.xpath("//input[@type='file']"))).sendKeys("C:\\testContent ...

  3. java文件

    File类 为了很方便的代表文件的概念,以及存储一些对于文件的基本操作,在java.io包中设计了一个专门的类——File类. 在File类中包含了大部分和文件操作的功能方法,该类的对象可以代表一个具 ...

  4. C4C销售订单中业务伙伴的自动决定功能Partner determination procedure

    例子:我新建一个Sales Order,account 字段选择ID为1001的Account:Porter LLC 创建成功后,观察这个Sales Order的Involved Party里,Bil ...

  5. robotframework实战二---Jenkins连用

    1.下载插件robot Jenkins环境搭建就不用说了,网上有很多帖子,你在使用时,你需要做以下几步 因为目前我已经安装了 2.新建项目 因为有重名的项目,所以会提示以下内容 你需要配置的内容就两处 ...

  6. 将xml转换成Json,数组,对象格式转换方法

    xml字符串:$simplexml 转换成Json格式:json_encode($simplexml) 转换成数组格式:json_decode(json_encode($simplexml),TRUE ...

  7. 调用外部EXE文件

    实现效果: 知识运用: Process类的Start方法 实现代码: private void button1_Click(object sender, EventArgs e) { OpenFile ...

  8. python3中使用HTMLTestRunner.py报ImportError: No module named 'StringIO'的解决办法

    .原因是官网的是python2语法写的,看官手动把官网的HTMLTestRunner.py改成python3的语法: 参考:http://bbs.chinaunix.net/thread-415474 ...

  9. CUDA 纹理内存

    原文链接 1.概述 纹理存储器中的数据以一维.二维或者三维数组的形式存储在显存中,可以通过缓存加速访问,并且可以声明大小比常数存储器要大的多. 在kernel中访问纹理存储器的操作称为纹理拾取(tex ...

  10. ES6初识-模块化

    export let A=123; export function test(){ console.log('test'); } export class Hello(){ test(){ conso ...