GridView中第一个item不显示,以及显示方式不正确的调整方式。
2016-02-24 19:07
435 查看
项目中在GridView的使用过程中遇到不少问题,在此记录一下,给自己提个醒:
Gridview第一个item不显示的问题。
在GridView中,我们在getView中可以映射每个item的布局,通过inflate的方式。这里参考一下大神的分析,具体在这里有详细的描述三种不同inflate方法的描述:
http://blog.csdn.net/lmj623565791/article/details/38171465。
在此建议使用第二种构造函数来构建inflate,至于为什么,第一种inflate(layoutId, null )是无法获取到布局文件的,那就无法通过getLayoutParams()和setLayoutParams()方法来进行单个item大小设置的。
有的朋友会问,可以用new GridViewLayoutParams()来操作,我对这个理解还不是很明白,但是我发现new出来的东西会出现莫名其妙的问题,所以个人自己建议是通过get和set方法来操作。
第一个item不显示,主要是我们在getView中通过get和set方法进行了动态的item大小控制,那么在这里我们的控制代码应该怎么放置呢?
@Override
public View getView(int position, View convertView, ViewGroup parent) {
// TODO Auto-generated method stub
Log.i("CustomGridViewAdapter", "getView be called");
ViewHold holder;
if (convertView == null || convertView.getTag() == null) {
convertView = mInflater.inflate(R.layout.image_text_button, parent,false);
holder = new ViewHold();
IniInflaterView(holder, convertView);
convertView.setTag(holder);
} else {
holder = (ViewHold) convertView.getTag();
}
<pre name="code" class="html">int mwidth = mPullToRefreshGridView.getWidth() / 7;
// Log.e("item宽度", mwidth + "");
LayoutParams lp = (LayoutParams) convertView.getLayoutParams();
lp.height = mwidth * 14 / 9;
lp.width = mwidth;
convertView.setLayoutParams(lp);
IniInflaterViewDoSomething(holder, arrayList.getBookInfo().get(position));return convertView;}
一般习惯性会把
int mwidth = mPullToRefreshGridView.getWidth() / 7;
// Log.e("item宽度", mwidth + "");
LayoutParams lp = (LayoutParams) convertView.getLayoutParams();
lp.height = mwidth * 14 / 9;
lp.width = mwidth;
convertView.setLayoutParams(lp);这几行代码放到if里面去操作,但是当构造完成是,已经存在了convertVIew的时候进的是else那就会影响到布局显示了。
参考几位前辈写的bolg:
http://blog.csdn.net/X_i_a_o_H_a_i/article/details/41822505
Gridview第一个item不显示的问题。
在GridView中,我们在getView中可以映射每个item的布局,通过inflate的方式。这里参考一下大神的分析,具体在这里有详细的描述三种不同inflate方法的描述:
http://blog.csdn.net/lmj623565791/article/details/38171465。
在此建议使用第二种构造函数来构建inflate,至于为什么,第一种inflate(layoutId, null )是无法获取到布局文件的,那就无法通过getLayoutParams()和setLayoutParams()方法来进行单个item大小设置的。
有的朋友会问,可以用new GridViewLayoutParams()来操作,我对这个理解还不是很明白,但是我发现new出来的东西会出现莫名其妙的问题,所以个人自己建议是通过get和set方法来操作。
第一个item不显示,主要是我们在getView中通过get和set方法进行了动态的item大小控制,那么在这里我们的控制代码应该怎么放置呢?
@Override
public View getView(int position, View convertView, ViewGroup parent) {
// TODO Auto-generated method stub
Log.i("CustomGridViewAdapter", "getView be called");
ViewHold holder;
if (convertView == null || convertView.getTag() == null) {
convertView = mInflater.inflate(R.layout.image_text_button, parent,false);
holder = new ViewHold();
IniInflaterView(holder, convertView);
convertView.setTag(holder);
} else {
holder = (ViewHold) convertView.getTag();
}
<pre name="code" class="html">int mwidth = mPullToRefreshGridView.getWidth() / 7;
// Log.e("item宽度", mwidth + "");
LayoutParams lp = (LayoutParams) convertView.getLayoutParams();
lp.height = mwidth * 14 / 9;
lp.width = mwidth;
convertView.setLayoutParams(lp);
IniInflaterViewDoSomething(holder, arrayList.getBookInfo().get(position));return convertView;}
一般习惯性会把
int mwidth = mPullToRefreshGridView.getWidth() / 7;
// Log.e("item宽度", mwidth + "");
LayoutParams lp = (LayoutParams) convertView.getLayoutParams();
lp.height = mwidth * 14 / 9;
lp.width = mwidth;
convertView.setLayoutParams(lp);这几行代码放到if里面去操作,但是当构造完成是,已经存在了convertVIew的时候进的是else那就会影响到布局显示了。
参考几位前辈写的bolg:
http://blog.csdn.net/X_i_a_o_H_a_i/article/details/41822505
相关文章推荐
- OC基础-03Foundation中的简单类和数据类型
- IOS Apps 开发(Swift)(2)——Learn the Essentials of Swift(2)
- Spring AOP与IOC以及自定义注解
- 《数据结构与算法分析(c描述)》—— 插入排序&希尔排序
- java swing的默人LookAndFeel
- LeetCode Algorithms #232 <Implement Queue using Stacks>
- cocos2dx 实现不一样的ScrollView
- 十大前端开发框架
- 文本挖掘的介绍
- UVa 11401 - Triangle Counting
- 放肆地使用UIBezierPath和CAShapeLayer画各种图形
- 压缩感知(1)
- POJ 1659 青蛙的邻居
- APUE.3e 安装 Ubuntu
- Java学习1
- 【BZOJ 3524】【Poi2014】Couriers 可持久化线段树
- 用DNW工具在ARM-Cortex-A8开发板烧写Linux系统详细讲解
- Nodejs V8引擎 fast property lookup
- struts2标签取值方式
- Thinking in Java---Concurrent包下的新构件学习+赛马游戏仿真