2013-11-30 4 views
1

Моя проблема проста: когда я нажимаю на значок, чтобы показать GridView, он показывает мне сетку фотографий, затем я снова и снова снова нажимаю на значок, чтобы увидеть GridView, и он показывает 2 сетки с теми же фотографиями. Например, если сначала у меня была фотография 1, фото 2, я снова нажимаю, и она показывает фото 1, фото 2, фото 1, фото 2. Я думал, что смогу ее решить, добавив SharedPreferences (чтобы проверить, находится ли пользователь в GridView для первого время). Есть ли лучший, более простой способ решить мою проблему? Код GridView в:GridView снова загружает изображения, когда onclick снова

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

Как я уже говорил вам о вашем предыдущем вопросе, не используйте статический модификатор для своего списка. Изменить это:

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)); 
Смежные вопросы