我的问题很简单:当我点击图标显示GridView时,它会显示我的照片网格,然后我一次又一次地回来,我点击图标查看GridView,它显示了2个带有相同照片的网格。例如,如果一开始我有照片1,照片2我再次按下它显示照片1,照片2,照片1,照片2.我想我可以通过添加SharedPreferences来解决它(以检查用户是否在第一个GridView中)时间)。有没有更好,更简单的方法来解决我的问题? GridView的代码:
public static List<Item> items = new ArrayList<Item>();
...
items.add(new Item("Name1", "Text1", R.drawable.pic_12));
items.add(new Item("Name2", "Text2", R.drawable.pic_13));
items.add(new Item("Name3", "Text3", R.drawable.pic_14));
items.add(new Item("Name4", "Text4", R.drawable.pic_15));
items.add(new Item("Name5", "Text5", R.drawable.pic_2));
GridView gridView = (GridView) findViewById(R.id.gridview);
gridView.setAdapter(new ImageAdapter(this, items));
ImageAdapter:
public class ImageAdapter extends BaseAdapter {
private List<Item> items = new ArrayList<Item>();
private LayoutInflater inflater;
public ImageAdapter(Context context, List<Item> items) {
inflater = LayoutInflater.from(context);
this.items = items;
}
@Override
public int getCount() {
return items.size();
}
@Override
public Object getItem(int i) {
return items.get(i);
}
@Override
public long getItemId(int i) {
return items.get(i).drawable;
}
@Override
public View getView(int i, View view, ViewGroup viewGroup) {
View v = view;
ImageView picture;
TextView name;
if (v == null) {
v = inflater.inflate(R.layout.squareimageview, viewGroup, false);
v.setTag(R.id.picture, v.findViewById(R.id.picture));
v.setTag(R.id.text, v.findViewById(R.id.text));
}
picture = (ImageView) v.getTag(R.id.picture);
name = (TextView) v.getTag(R.id.text);
Item item = (Item) items.get(i);
picture.setImageResource(item.getDrawable());
name.setText(item.name);
return v;
}
}
项目类:
public class Item {
String name;
int drawable;
String text;
public int getDrawable() {
return drawable;
}
public void setDrawable(int drawable) {
this.drawable = drawable;
}
public Item(String name, String text, int id) {
this.name = name;
this.text = text;
this.drawable = id;
}
public String getText() {
return text;
}
public void setText(String text) {
this.text = text;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}
答案 0 :(得分:0)
正如我在上一个问题上告诉你的那样,不要在列表中使用静态修饰符。改变这个:
public static List<Item> items = new ArrayList<Item>();
为此:
public List<Item> items;
如果使用静态数据数组,数据将一直存在,直到您关闭应用程序,因为它依赖于类(而不是实例)。
然后,在您的代码中更改此内容:
items = new ArrayList<Item>();
items.add(new Item("Name1", "Text1", R.drawable.pic_12));
items.add(new Item("Name2", "Text2", R.drawable.pic_13));
items.add(new Item("Name3", "Text3", R.drawable.pic_14));
items.add(new Item("Name4", "Text4", R.drawable.pic_15));
items.add(new Item("Name5", "Text5", R.drawable.pic_2));
GridView gridView = (GridView) findViewById(R.id.gridview);
gridView.setAdapter(new ImageAdapter(this, items));