我使用了一个GridView,其每个Item包括一个ImageView和一个TextView,详细如下:
1、首先其Item的xml:<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_height="wrap_content" android:paddingBottom="4dip"
android:layout_width="fill_parent">
<ImageView android:layout_height="wrap_content"
android:id="@+id/itemImage"
android:layout_width="wrap_content"
android:layout_centerHorizontal="true"
android:src="@drawable/btnred">
</ImageView>
<TextView android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="01"
android:textColor="#000000"
android:textSize="30sp"
android:layout_centerHorizontal="true"
android:layout_centerVertical="true"
android:id="@+id/itemText">
</TextView>
</RelativeLayout> 2、然后是Adapter:public class GridAdapter extends BaseAdapter {
private class GridHolder {
ImageView appImage;
TextView appName;
}
private Context context;
private List<GridInfo> list;
private LayoutInflater mInflater;
public GridAdapter(Context c) {
super();
this.context = c;
}
public void setList(List<GridInfo> list) {
this.list = list;
mInflater = (LayoutInflater) context
.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
}
public int getCount() {
// TODO Auto-generated method stub
return list.size();
}
@Override
public Object getItem(int index) {
return list.get(index);
}
@Override
public long getItemId(int index) {
return index;
}
@Override
public View getView(int index, View convertView, ViewGroup parent) {
GridHolder holder;
if (convertView == null) {
convertView = mInflater.inflate(R.layout.grid_item, null);
holder = new GridHolder();
holder.appImage = (ImageView)convertView.findViewById(R.id.itemImage);
holder.appName = (TextView)convertView.findViewById(R.id.itemText);
convertView.setTag(holder);
}else{
holder = (GridHolder) convertView.getTag();
}
GridInfo info = list.get(index);
if (info != null) {
holder.appName.setText(info.getName());
}
return convertView;
}
}3、还有List class:public class GridInfo{
private String name;
public GridInfo(String name) {
super();
this.name = name;
}
public String getName(){
return name;
}
public void setName(String name){
this.name = name;
}
}4、然后我在antivity中这样加载和设置OnItemClick功能:private GridView gridview;
private List<GridInfo> list;
private GridAdapter adapter;
private boolean arrRed[]=new boolean[35];gridview = (GridView) findViewById(R.id.gridview);
list = new ArrayList<GridInfo>();
for(int i=0;i<35;i++){
list.add(new GridInfo(i<9?"0"+String.valueOf(i+1):String.valueOf(i+1)));
} adapter = new GridAdapter(this);
adapter.setList(list);
gridview.setAdapter(adapter);
gridview.setOnItemClickListener(new ItemClickListener());class ItemClickListener implements OnItemClickListener{
public void onItemClick(AdapterView<?> a, View v, int position, long id){
ImageView redRall;
String strSelected="";
if(arrRed[position]){
//取消
arrRed[position]=false;
redRall= (ImageView)v.findViewById(R.id.itemImage);
redRall.setImageResource(R.drawable.btnred);
}else{
//选择
arrRed[position]=true;
redRall = (ImageView)v.findViewById(R.id.itemImage);
redRall.setImageResource(R.drawable.btnblackh);
}
}
}
但是问题来了,由于GridView里的Item比较多而出现了上下滚动条(我在Layout xml里把GridView的layout_width设置为固定大小),在点击过一个Item后(Item点击后会,里面的ImageView会换一个图片),在滚动GridView时会随机出现一个Item自动换了图,而原来点击那个Item也换回了未点击的图片。不知道大家有没有遇到这个情况?现在一时解决不了,help me! 3Q
1、首先其Item的xml:<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_height="wrap_content" android:paddingBottom="4dip"
android:layout_width="fill_parent">
<ImageView android:layout_height="wrap_content"
android:id="@+id/itemImage"
android:layout_width="wrap_content"
android:layout_centerHorizontal="true"
android:src="@drawable/btnred">
</ImageView>
<TextView android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="01"
android:textColor="#000000"
android:textSize="30sp"
android:layout_centerHorizontal="true"
android:layout_centerVertical="true"
android:id="@+id/itemText">
</TextView>
</RelativeLayout> 2、然后是Adapter:public class GridAdapter extends BaseAdapter {
private class GridHolder {
ImageView appImage;
TextView appName;
}
private Context context;
private List<GridInfo> list;
private LayoutInflater mInflater;
public GridAdapter(Context c) {
super();
this.context = c;
}
public void setList(List<GridInfo> list) {
this.list = list;
mInflater = (LayoutInflater) context
.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
}
public int getCount() {
// TODO Auto-generated method stub
return list.size();
}
@Override
public Object getItem(int index) {
return list.get(index);
}
@Override
public long getItemId(int index) {
return index;
}
@Override
public View getView(int index, View convertView, ViewGroup parent) {
GridHolder holder;
if (convertView == null) {
convertView = mInflater.inflate(R.layout.grid_item, null);
holder = new GridHolder();
holder.appImage = (ImageView)convertView.findViewById(R.id.itemImage);
holder.appName = (TextView)convertView.findViewById(R.id.itemText);
convertView.setTag(holder);
}else{
holder = (GridHolder) convertView.getTag();
}
GridInfo info = list.get(index);
if (info != null) {
holder.appName.setText(info.getName());
}
return convertView;
}
}3、还有List class:public class GridInfo{
private String name;
public GridInfo(String name) {
super();
this.name = name;
}
public String getName(){
return name;
}
public void setName(String name){
this.name = name;
}
}4、然后我在antivity中这样加载和设置OnItemClick功能:private GridView gridview;
private List<GridInfo> list;
private GridAdapter adapter;
private boolean arrRed[]=new boolean[35];gridview = (GridView) findViewById(R.id.gridview);
list = new ArrayList<GridInfo>();
for(int i=0;i<35;i++){
list.add(new GridInfo(i<9?"0"+String.valueOf(i+1):String.valueOf(i+1)));
} adapter = new GridAdapter(this);
adapter.setList(list);
gridview.setAdapter(adapter);
gridview.setOnItemClickListener(new ItemClickListener());class ItemClickListener implements OnItemClickListener{
public void onItemClick(AdapterView<?> a, View v, int position, long id){
ImageView redRall;
String strSelected="";
if(arrRed[position]){
//取消
arrRed[position]=false;
redRall= (ImageView)v.findViewById(R.id.itemImage);
redRall.setImageResource(R.drawable.btnred);
}else{
//选择
arrRed[position]=true;
redRall = (ImageView)v.findViewById(R.id.itemImage);
redRall.setImageResource(R.drawable.btnblackh);
}
}
}
但是问题来了,由于GridView里的Item比较多而出现了上下滚动条(我在Layout xml里把GridView的layout_width设置为固定大小),在点击过一个Item后(Item点击后会,里面的ImageView会换一个图片),在滚动GridView时会随机出现一个Item自动换了图,而原来点击那个Item也换回了未点击的图片。不知道大家有没有遇到这个情况?现在一时解决不了,help me! 3Q
解决方案 »
- android虚拟机,查看设置>>存储,报错停止!!!求原因
- NDK gdb设置断点的时候总是显示No line * in file.....
- 使用ActivityGroup来实现TabHost的效果!请问怎么让程序启动默认显示第一个Activity
- 问个简单的问题啊。我在写android 程序时 我怎么知道我都该 import 什么东西啊
- 从assets中加载多个图片出错,求高人解决,急!
- 使用mrdir建立文件夹时为何出现readonly错误。
- Button如何像list实现持续按键响应?
- android调用系统录音机或取声音文件后如何使用??
- 求助大神,安卓虚拟机数据库找不到文件
- 如何获取ListView中某一列的数据
- android怎么设置桌面布局和快捷方式之类??
- 菜鸟求助!!!
GridHolder holder;
if (convertView == null) {
convertView = mInflater.inflate(R.layout.grid_item, null);
holder = new GridHolder();
holder.appImage = (ImageView)convertView.findViewById(R.id.itemImage);
holder.appName = (TextView)convertView.findViewById(R.id.itemText);
convertView.setTag(holder);
}else{
holder = (GridHolder) convertView.getTag();
}
GridInfo info = list.get(index);
if (info != null) {
holder.appName.setText(info.getName());
}
return convertView;
}
改成:public View getView(int index, View convertView, ViewGroup parent) {
GridHolder holder;
convertView = mInflater.inflate(R.layout.grid_item, null);
holder = new GridHolder();
holder.appImage = (ImageView)convertView.findViewById(R.id.itemImage);
holder.appName = (TextView)convertView.findViewById(R.id.itemText);
convertView.setTag(holder);
GridInfo info = list.get(index);
if (info != null) {
holder.appName.setText(info.getName());
}
return convertView;
} 就好了
由于项目的时间问题你的代码还没有试,不过应该没问题,先把分给你 呵呵
public View getView(int index, View convertView, ViewGroup parent) {
GridHolder holder;
if (convertView == null) {
convertView = mInflater.inflate(R.layout.grid_item, null);
}
holder = new GridHolder();
holder.appImage = (ImageView)convertView.findViewById(R.id.itemImage);
holder.appName = (TextView)convertView.findViewById(R.id.itemText);
convertView.setTag(holder);
GridInfo info = list.get(index);
if (info != null) {
holder.appName.setText(info.getName());
}
return convertView;
}
rmm0001能说一下这样修改的原因吗? 谢谢