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 ...
随机推荐
- Eclipse:很不错的插件-devStyle,将你的eclipse变成idea风格
使用教程 https://blog.csdn.net/stillonmyway/article/details/79109741 我使用使用的是护眼型的
- Python模块与函数
python的程序由包(package).模块(module)和函数组成.模块是处理某一类问题的集合,模块由函数和类组成,包是由一系列模块组成的集合.包必须至少包含一个__init__.py文件,该文 ...
- C语言总结的知识点
什么是有效数字? ------------------------- 数据类型 运算符: 函数: 程序结构: 存储结构 内存管理 关键字: ------------------------- C语言: ...
- SQL-有关数据库的提问
各位大侠,小弟初来乍到,对sql , pl/sql ,t/sql概念比较模糊,有以下几个问题希望能帮我解答: 1:plsql到底是语言还是工具?我看到有人说oracle的存储过程是拿plsql写的,那 ...
- POJ-3041 Asteroids---二分图&最小覆盖点
题目链接: https://vjudge.net/problem/POJ-3041 题目大意: 给一个N*N的矩阵,有些格子有障碍,要求我们消除这些障碍,问每次消除一行或一列的障碍, 最少要几次. 解 ...
- 立体最短路径,广搜(POJ2251)
题目链接:http://poj.org/problem?id=2251 参考了一下大神们的解法.也有用深搜的.然而,之前不久看到一句话,最短路径——BFS. 参考:http://blog.csdn.n ...
- Jmeter文件目录,功能简介
1.Jmeter文件目录:1)bin文件: Jmeter启动:bin/jmeter.bat Jmeter日志文件:jmeter.log Linux的启动文件:Jmeter.sh Jmeter系统配置文 ...
- MySQL-常用的存储引擎
MySQL-常用的存储引擎 存储引擎 事务 锁粒度 主要应用 忌用 MyISAM 不支持 支持并发插入的表级锁 select,insert 读写操作频繁 MRG_MYISAM 不支持 支持并发插入的表 ...
- c++谭浩强教材教学练习例题1.2 求两数之和 为什么sum=a+b;sum的值为65538
第一章 #include <iostream>using namespace std; int main(){ int a,b,sum; sum=a+b; cin>>a> ...
- Webpack4 学习笔记一初探Webpack
前言 此内容是个人学习笔记,以便日后翻阅.非教程,如有错误还请指出 Webpack 打包文件 支持JS模块化 模式: production(0配置默认), development(生产环境) 更详细的 ...