在Gallery中,要实现的功能是选中的View文本的颜色和其他View不同,有相关方法吗?找了好长时间没有解决,现在想用一种笨办法来做,先遍历Gallery中的所有view,然后初始化为初始颜色,在setOnItemSelectedListener中把选中的view置为其他颜色,但是如何获得Gallery已经加载的view呢?

解决方案 »

  1.   

    实现自定义的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;
    }}
      

  2.   

    使用这种方法不行。我每次拨动Gallery,选中的position为中间的view的位置,但是adapter每次加载的却是新出现的view的position,所以根本就不可能categorySelected == position。
    我要的效果是左右滑动时候,永远中间选中的view的背景不同
      

  3.   

    所以最好的方法还是能获得当前存在的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重用的原因呢?
      

  4.   

    这个问题已经解决了,可以使用getView(int position, View convertView, ViewGroup parent){}中的ViewGroup参数获得已加载的所有View。
    3楼写的挺多的,分给你了