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