现在的位置: 首页 > 综合 > 正文

通用代码库之listview和GridView

2018年05月01日 ⁄ 综合 ⁄ 共 3981字 ⁄ 字号 评论关闭

1、记录Android心得及点滴

2、android ListView详解

3、RGB颜色查询对照表

4、为了做到优化ListView或GridView,适配器写法,代码记录。

public class RecordListAdapter extends BaseAdapter {

	public Context context;
	public ArrayList<PlayRecordDate> list;
	LayoutInflater inflater;

	public RecordListAdapter(Context context, ArrayList<PlayRecordDate> list,
			FinalBitmap fb) {
		this.context = context;
		this.list = list;
		inflater = (LayoutInflater) context
				.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
	}

	@Override
	public int getCount() {
		// TODO Auto-generated method stub
		return list.size();
	}

	@Override
	public Object getItem(int position) {
		// TODO Auto-generated method stub
		return list.get(position);
	}

	@Override
	public long getItemId(int position) {
		// TODO Auto-generated method stub
		return position;
	}

	public class ViewHolder {
		private ImageView playrecord_img;
		private TextView playrecord_name;
	}

	@Override
	public View getView(final int position, View convertView, ViewGroup parent) {
		// TODO Auto-generated method stub
		ViewHolder holder = null;
		if (convertView == null) {
			holder = new ViewHolder();
			convertView = inflater.inflate(
					R.layout.gridview_playrecord_item_layout, null);
			holder.playrecord_img = (ImageView) convertView
					.findViewById(R.id.play_record_img);
			holder.playrecord_name = (TextView) convertView
					.findViewById(R.id.play_record_name);
			convertView.setTag(holder);
		} else {
			holder = (ViewHolder) convertView.getTag();
		}
		holder.playrecord_img.setBackgroundResource(R.drawable.bgselector);
		holder.playrecord_name.setText(list.get(position).getVideoName());
		return convertView;
	}
}

5.使用GridView时,通用代码记录

<GridView android:id="@+id/grid"  
android:layout_width="fill_parent"  
android:layout_height="fill_parent"
android:cacheColorHint="#00000000"
android:listSelector="#00000000" 
android:verticalSpacing="35px" <!-- grid元素之间的竖直间隔 如果想改变列数,可以改变这个值来达到要求 -->  
android:horizontalSpacing="5px" <!--grid元素之间的水平间隔 -->  
android:numColumns="auto_fit" <!--表示有多少列,如果设置为auto_fit,将根据columnWidth和Spacing来自动计算 -->  
android:columnWidth="100px" <!-- 一般建议采用有像素密度无关的dip或者dp来表示-->  
android:stretchMode="SpacingWidth" <!--如何填满空余的位置,模拟器采用WVGA800*480,每排4列,有4*100+5*3=415,
                                  还余65px的空间,如果是columnWidth,则这剩余的65将分摊给4列,每列增加16/17px。
                                  如果采用SpacingWidth,则分摊给3个间隔空隙 -->  
android:gravity="center" /> 

常用GridView每项的布局

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="220dp"
    android:layout_height="wrap_content"
    >
    <ImageView
        android:id="@+id/play_record_img"
        android:layout_width="220dp"
        android:layout_height="300dp"
        android:layout_centerHorizontal="true"
        android:scaleType="fitXY"/>
    <TextView//当字数比较多的时候,该TextView会滚动显示文字 解决TextView不用获取焦点也能实现跑马灯
        android:id="@+id/play_record_name"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_below="@id/play_record_img"
        android:layout_centerHorizontal="true"
        android:ellipsize="marquee"
        android:lines="1"
        android:marqueeRepeatLimit="marquee_forever"
        android:singleLine="true"
        android:textColor="#FFFFFF"
        android:textSize="26dip" />
</RelativeLayout>

如果只在图片上做选中状态时,可以写一个选择器selector

<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android" >
    <item android:state_focused="true" android:drawable="@drawable/select"></item>
<item android:state_selected="true" android:drawable="@drawable/select"></item>
</selector>

再把选择器加入到图片背景上,这样就会做到焦点在哪里,该ImageView就会出现选择样式
img.setBackgroundResource(R.drawable.bgselector);
1、提出问题:我想在同一个界面中,使用两个GridView,两个GridView一起上下滚动;
如果直接将两个GridView添加到同一个界面上,它们是各自滚动的。
因此,我考虑使用SrollView,将它们包装一下!
但这样做会提示如下信息:
The vertically scrolling ScrollView should not contain another vertically scrolling widget (GridView)
并且GridView的界面也显示不全,只显示了一部分????
解决问题:显示上面错误信息是因为ScrollView中只能包含一个子空间。要想让GridView全部显示数据,并不出现GridView滚动情况,需要重写GridView,具体请参考在SrollView中嵌套GridView或ListView

2、提出问题:根据上面的情况,点击事件触发不了该怎么解决??
解决问题:如使用gridview.setOnItemClickListener()作为点击事件的监听,需要把item中的元素全部设为android:focusable="false",android:clickable="false",意思是不处理焦点事件,不处理点击事件
这样焦点事件和点击事件就由GridView本身来处理,即gridview.setOnItemClickListener()来处理。
另一种方法就是在适配器中给其中一个元素添加img.setOnClickListener()监听,也能处理GridView的点击事件。

3、提出问题:ScrollView中嵌套GridView(已重写),ScrollView滚动条不在最顶部 
解决问题;请参考http://www.eoeandroid.com/thread-301885-1-1.html







抱歉!评论已关闭.