在android中从一个网格视图刷新另一个网格视图

在android中从一个网格视图刷新另一个网格视图,android,android-gridview,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.gridItems

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

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,初始设置为isvisited属性为false的项目很少(文本设置为1到10)

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中单击一个项目并检查发生了什么时,所有的数字都是混乱的。 有没有人可以建议我如何从另一个gridview刷新一个gridview(同时在不同的文件中使用自定义适配器)

一些需要检查的内容

  • 调用
    adapter.notifyDataSetChanged()
    后是否调用了
    GridViewAdapter
    getView

  • 在您的
    GridViewAdapter
    中,我发现了一些问题,这可能是它未被填充的原因

  • 只有当
    convertView
    null
    时,才能设置文本

    试试这个

    `@凌驾 公共视图getView(int arg0、视图转换视图、视图组arg2){

    }

    现在你应该有Holder类了

    私有静态类持有者{
    文本视图电视;
    
    };

    那么如果v==null,是否不需要检查itemobject.isvisited条件?我尝试了您建议的方法。我可以刷新适配器,但它的行为很奇怪。我点击的号码也被按相反的顺序替换。像这样的东西。如果按1,第一个网格项和最后一个网格项将替换为1。我甚至试过调试。调试时,一切正常。但是在再次停止调试之后,同样的行为发生了。某处出了问题。您还有其他建议吗?请检查一下这个。。
    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;