版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/zhuxu820_/article/details/46547641
<span style="font-family: Arial, Helvetica, sans-serif; background-color: rgb(255, 255, 255);">几点关键点.</span>
1.横向Gridview
public class HorizontalGridView extends GridView{
public HorizontalGridView(Context context, AttributeSet attrs) {
super(context, attrs);
}
@Override
protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
int measureSpec = MeasureSpec.makeMeasureSpec(Integer.MAX_VALUE >> 2,
MeasureSpec.AT_MOST);
super.onMeasure(widthMeasureSpec, measureSpec);
}
}
首先自定义GridView 在布局文件中引用
如果想让Gridview实现横向滑动 可在Gridview外围包裹一个 HorizontalScrollView 横向滚动条
其它内部布局不再赘述
2.横向gridview的配置
在这里我们用到了LayoutInflator
在实际开发中LayoutInflater这个类还是非常有用的,它的作用类似于findViewById()。不同点是LayoutInflater是用来找res/layout/下的xml布局文件,并且实例化;而findViewById()是找xml布局文件下的具体widget控件(如Button、TextView等)。
LayoutParams params = new LinearLayout.LayoutParams(1,LinearLayout.LayoutParams.MATCH_PARENT);
// 此处的 1 ,表示Gridview的宽度 可以在此处直接指定 也可在稍后更改
<pre name="code" class="java">viewHolder.gridView.setColumnWidth(150); // 设置列宽 为150 可根据需要自行更改
viewHolder.gridView.setStretchMode(GridView.NO_STRETCH); // 设置为禁止拉伸模式
viewHolder.gridView.setNumColumns(GridView.AUTO_FIT); // 设置列数 每一列的item数目 设置为自动
viewHolder.gridView.setHorizontalSpacing(2); // 两列之间的间距
viewHolder.gridView.setLayoutParams(params); // 设置GirdView布局参数,横向布局的关键
viewHolder怎么用不要问我啦 自行百度
3.ListView内嵌Gridview的关键
内嵌的关键就是使用BaseAdapter
通常BaseAdapter需要用到getView ,getCount方法.
当系统开始绘制的时候,首先会调用getCount()方法. 并得到getCount方法的返回值,
然后系统调用getView()方法,根据getCount方法的返回值 逐一绘制
也就是说,如果getCount返回1, 那么只绘制一行, 如果返回0,则不绘制
@Override
public int getCount() {
return citys.size() + 1;
}
所以在使用BaseAdapter的时候,getView是关键. 但是如果你不注意getCount返回的值,可能会发现你什么都绘制不出来. 检查getCount()的返回值是否为0
下面看getView()方法
此处进行了一个判断 目的是优化效率..
懒得打字了 附上一个比较详细的介绍Adapter的文章
// 然后系统调用getView()方法,根据getCount的长度逐一绘制ListView的每一行。
@Override
public View getView(int position, View convertView, ViewGroup parent) {
ViewHolder viewHolder = null;
if (convertView == null) {
// 将 list_item 转换为View "LayoutInflater的作用"
convertView = LayoutInflater.from(context).inflate(
R.layout.list_item, null);
viewHolder = new ViewHolder(convertView);
// setTag()会把View与ViewHolder绑定,形成一一对应的关系,拖动listview的时候会重新绘制每一条item
convertView.setTag(viewHolder);
} else {
// 但是那些已经取得绑定的View,会调用getTag()方法,就不会重新绘制,而是拿到内存中已经取得的资源,提高了效率
viewHolder = (ViewHolder) convertView.getTag();
}
viewHolder.head_text.setText(title_list.get(position) + "");
}
END. 结束
差不多就这么多了 这差不多是平时可能遇到的问题
1.ListView内嵌Gridview时,Gridview不显示
方案: 检查Gridview的Adapter是否获得正确的值
检查Gridview的Adapter中getCount()方法是否返回0
2.横向Gridview失败
方案: LayoutParams 的设置中,检查以下:
setColumnWidth 设置列宽
setStretchMode 设置模式
setNumColumns 设置每一列Item的数目
setHorizontalSpacing 设置两列之间的间距
setLayoutParams 设置Gridview布局参数