再次onclick时,GridView再次加载图像

时间:2013-11-30 16:42:27

标签: android image gridview onclick

我的问题很简单:当我点击图标显示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;
    }

}

1 个答案:

答案 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));