Android下ListView内嵌横向Gridview

版权声明:本文为博主原创文章,未经博主允许不得转载。 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布局参数

猜你喜欢

转载自blog.csdn.net/zhuxu820_/article/details/46547641