仅更新GridView上单击的图像

时间:2015-07-07 09:23:59

标签: android gridview imageview custom-adapter

我有一个GridView使用ImageView元素的自定义适配器。我想更改ImageView onItemClick,我有点击的条件。如果单击的项目可用,我将更改图像。但是,当我更改项目的图像资源时,我必须通过adapter.notifyDataSetChanged();来更新整个GridView。我的GridView有100个元素,所以更新它们都需要花费我半秒钟的延迟而且令人不安。我如何只更新我已更改的元素?

这是适配器中的getView()方法。

  public View getView(final int position, View convertView, ViewGroup parent) {
    Point point;
    View v = null;
    point=items.get(position); 
    int resId;
    resId=point.getBackground();
    v = inflater.inflate(R.layout.item, null);
    ImageView tv = (ImageView) v.findViewById(R.id.image_button);
    tv.setImageResource(resId);
    return v;
}

这是Point对象

上的getBackground()方法
public int getBackground(){
    int backId=(R.drawable.button_initial);
    if(isFilled){
        backId=(R.drawable.button_clicked);
    }
    else if(isAvailable){
        backId=(R.drawable.button_green);
    }
    return backId;
}

提前致谢。

1 个答案:

答案 0 :(得分:0)

您应该更新项目列表中的点,然后调用notifyDataSetChanged();

最好是在活动中那样做..就像那样

List<Point> points = new ArrayLIst<Point>;
Adapter adapter = new Adapter(points);

    gridView.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {
      @Override
      public void onItemSelected(AdapterView<?> parent, View view, int position, long id) {
        Point p = items.get(position);
        p.setBackground(..);
        adapter.notifyDataSetChanged();
      }

      @Override public void onNothingSelected(AdapterView<?> parent) {

      }
    });