0

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

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(同时在单独的文件中使用自定义适配器)

4

1 回答 1

0

有几件事要检查。

  1. 在你调用之后adapter.notifyDataSetChanged()是你GridViewAdaptergetView调用吗?

  2. 在你的GridViewAdapter我发现了一些问题,这可能是它没有被填充的原因。

仅当convertViewis时才设置文本null

试试这个

`@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; };

于 2013-10-08T03:06:09.273 回答