我有一个如下所示的基本适配器:
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中的项目并检查发生了什么时,所有数字都是混乱的。 有人可以建议我如何刷新另一个网格视图(在单独的文件中使用自定义适配器)
答案 0 :(得分:0)
要检查的一些事项。
调用adapter.notifyDataSetChanged()
之后,您的GridViewAdapter
getView
被调用了吗?
在您的GridViewAdapter
中,我发现了一些问题,这可能是其未填充的原因。
仅当convertView
为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;
};