如何遍历Gallery中的每个View 在Gallery中,要实现的功能是选中的View文本的颜色和其他View不同,有相关方法吗?找了好长时间没有解决,现在想用一种笨办法来做,先遍历Gallery中的所有view,然后初始化为初始颜色,在setOnItemSelectedListener中把选中的view置为其他颜色,但是如何获得Gallery已经加载的view呢? 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 实现自定义的BaseAdapter,并保存选中的view 的position,每次需要时更新该positon的值。参考代码public class GalleryAdapter extends BaseAdapter { private Context context; private List<GalleryData> categoryList; //display data private int categorySelected = -1; public GalleryAdapter(Context context, List<BoxCategory> categoryList){ this.context = context; this.categoryList = categoryList; } @Override public int getCount() { // TODO Auto-generated method stub return categoryList.size()+1; } @Override public Object getItem(int position) { // TODO Auto-generated method stub return position; } @Override public long getItemId(int position) { // TODO Auto-generated method stub return position; } public void SetSelectPosition(int position){ //该接口可供外部调用,设定选中的位置 categorySelected = position; } @Override public View getView(int position, View view, ViewGroup arg2) { // TODO Auto-generated method stub CategoryHolder holder = null; if (view == null) { holder = new CategoryHolder(); view = LayoutInflater.from(context).inflate( R.layout.layout_gridview_item, null); holder.image = (ImageView) view.findViewById(R.id.image); holder.text = (TextView) view.findViewById(R.id.text); view.setTag(holder); } else { holder = (CategoryHolder) view.getTag(); } if(categorySelected != position){ view.setBackgroundResource(R.drawable.corners_bg_white); //未选中 }else{ view.setBackgroundResource(R.drawable.frame_bg_blue); //选中时 } holder.position = position; holder.image.setImageResource(categoryList.get(position).GetCategoryImage()); holder.text.setText(categoryList.get(position).GetCategoryName()); return view; } public class CategoryHolder { int position; public ImageView image; public TextView text; }} 使用这种方法不行。我每次拨动Gallery,选中的position为中间的view的位置,但是adapter每次加载的却是新出现的view的position,所以根本就不可能categorySelected == position。我要的效果是左右滑动时候,永远中间选中的view的背景不同 所以最好的方法还是能获得当前存在的Gallery的所有item(即每个选项的view),这样我可以每次滑动选择时,先把其他的view都初始化为原始颜色,只把选中的view设置为特殊的颜色。但是不管是使用public void onItemSelected(AdapterView<?> parent, View view,int position, long id) {}中的parent,还会使用getView(int position, View convertView, ViewGroup parent){}中的parent获得的都不是Gallery已经加载的item view集合,是不是Gallery中item view重用的原因呢? 这个问题已经解决了,可以使用getView(int position, View convertView, ViewGroup parent){}中的ViewGroup参数获得已加载的所有View。3楼写的挺多的,分给你了 ListView优化问题,求解 关于一个判断非空的问题 Android usb host获取设备列表的问题 录音问题 高德地图api的InfoWindow怎么关闭 android中控制ListView宽度和高度 android 平板电脑怎么彻底隐藏底部那个导航栏 Viewpager按钮点击切换图片 新手代码问题,没用到数据库却显示数据库安全性不好 Android如何顺序加载图片? 急求小鱼在水里自由游动算法 managedQuery和getContentResolver这两个方法的原理是什么
private Context context;
private List<GalleryData> categoryList; //display data
private int categorySelected = -1; public GalleryAdapter(Context context, List<BoxCategory> categoryList){
this.context = context;
this.categoryList = categoryList;
}
@Override
public int getCount() {
// TODO Auto-generated method stub
return categoryList.size()+1;
} @Override
public Object getItem(int position) {
// TODO Auto-generated method stub
return position;
} @Override
public long getItemId(int position) {
// TODO Auto-generated method stub
return position;
}
public void SetSelectPosition(int position){ //该接口可供外部调用,设定选中的位置
categorySelected = position;
}
@Override
public View getView(int position, View view, ViewGroup arg2) {
// TODO Auto-generated method stub
CategoryHolder holder = null;
if (view == null) {
holder = new CategoryHolder();
view = LayoutInflater.from(context).inflate(
R.layout.layout_gridview_item, null);
holder.image = (ImageView) view.findViewById(R.id.image);
holder.text = (TextView) view.findViewById(R.id.text);
view.setTag(holder);
} else {
holder = (CategoryHolder) view.getTag();
}
if(categorySelected != position){
view.setBackgroundResource(R.drawable.corners_bg_white); //未选中
}else{
view.setBackgroundResource(R.drawable.frame_bg_blue); //选中时
}
holder.position = position;
holder.image.setImageResource(categoryList.get(position).GetCategoryImage());
holder.text.setText(categoryList.get(position).GetCategoryName()); return view;
}
public class CategoryHolder {
int position;
public ImageView image;
public TextView text;
}}
我要的效果是左右滑动时候,永远中间选中的view的背景不同
但是不管是使用public void onItemSelected(AdapterView<?> parent, View view,int position, long id) {}中的parent,还会使用getView(int position, View convertView, ViewGroup parent){}中的parent获得的都不是Gallery已经加载的item view集合,是不是Gallery中item view重用的原因呢?
3楼写的挺多的,分给你了