在android中刷新一个网格视图

时间:2013-10-08 02:44:31

标签: android android-gridview

我有一个如下所示的基本适配器:

public class GridViewAdapter extends BaseAdapter {

Context cont;
........

@Override
public View getView(int arg0, View convertView, ViewGroup arg2) {

    View v;
    TextView tv;
    GridItemObject itemObject = (Constants.gridItemsList.get(arg0));
    if (convertView == null) // if it’s not recycled, initialize some  attributes
    { 
        LayoutInflater li = (LayoutInflater) cont
                .getSystemService(Context.LAYOUT_INFLATER_SERVICE);
        v = li.inflate(R.layout.grid_item, null);

        tv = (TextView) v.findViewById(R.id.grid_item_textView1);

                    if(itemObject.isvisited)
                    {
                     tv.setText(itemObject.letter);
                    }
        }

    } 
    else 
    {
        v = (View) convertView;
    }
    return v;

}

Constants.gridItemsList是List<类型的静态列表。 GridItemObject>其中几个项目(文本集从1到10)最初设置为isvisited属性为false。

GridItemObject是一个定义如下的类:

    public class GridItemObject 
    {
      public String letter;
      public boolean isvisited;
    }

我希望从另一个gridview刷新此gridview,如下所示:

public class CustomGridViewAdapter extends BaseAdapter {

    Context cont;
    GridViewAdapter adapter;
    // setting the values in constructor....

    @Override
    public int getCount() {
    return 10;
    }

    @Override
    public View getView(int arg0, View convertView, ViewGroup arg2) {
    View v;
    TextView tv;
    LayoutInflater li = (LayoutInflater) cont
                .getSystemService(Context.LAYOUT_INFLATER_SERVICE);
        v = li.inflate(R.layout.numbers_grid_item, null);

        tv = (TextView) v.findViewById(R.id.numbers_grid_item_textView1); 
    tv.setText(arg0+"");

    tv.setOnClickListener(new OnClickListener() {

    @Override
    public void onClick(View arg0) {
      GridItemObject itemObject = (Constants.gridItemsList.get(arg0));
      itemObject.isvisited = true;
      adapter.notifyDataSetChanged();
    }
  });

我在我的活动中使用了这个gridview。

问题是,我无法从CustomGridViewAdapter刷新GridViewAdapter适配器。 当我单击CustomGridViewAdapter的gridview中的项目并检查发生了什么时,所有数字都是混乱的。 有人可以建议我如何刷新另一个网格视图(在单独的文件中使用自定义适配器

1 个答案:

答案 0 :(得分:0)

要检查的一些事项。

  1. 调用adapter.notifyDataSetChanged()之后,您的GridViewAdapter getView被调用了吗?

  2. 在您的GridViewAdapter中,我发现了一些问题,这可能是其未填充的原因。

  3. 仅当convertViewnull时才设置文字。

    试试这个

    `@Override   public View getView(int arg0,View convertView,ViewGroup arg2){

    View v = convertView;
    TextView tv;
    GridItemObject itemObject = (Constants.gridItemsList.get(arg0));
    Holder h;
    if (v== null) // if it’s not recycled, initialize some  attributes
    { 
        h = new Holder();
        LayoutInflater li = (LayoutInflater) cont
                .getSystemService(Context.LAYOUT_INFLATER_SERVICE);
        v = li.inflate(R.layout.grid_item, null);
    
        h.tv = (TextView) v.findViewById(R.id.grid_item_textView1);
        v.setTag(h);
    
        }
    
    } 
    else 
    { 
       h = (Holder)v.getTag();
    }
       if(itemObject.isvisited)
           {
             h.tv.setText(itemObject.letter);
           } 
    
    return v;
    

    }

    现在你应该拥有Holder类

    private static class Holder{ TextView tv; };