在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 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;