0

У меня есть приложение для Android, в котором есть галерея сетки. На этом экране сетки я показываю изображения в полноэкранном режиме, когда пользователь нажимает на изображение. Это работает очень хорошо. Но проблема в виде сетки показывает изображения правильно, когда они появляются на экране в первый раз, но порядок меняется случайным образом, когда пользователь прокручивает его вниз, чтобы увидеть больше изображений. Вот мой код ниже для адаптеров, и вы можете взглянуть на фотографии.Порядок изображений в Grid View в Android

public class GridGallery extends BaseAdapter { 

    Context context; 

    public GridGallery(Context context) { 
     this.context = context; 
    } 

    @Override 
    public int getCount() { 
     return urlList.size(); 
    } 

    @Override 
    public Object getItem(int position) { 
     return position; 
    } 

    @Override 
    public long getItemId(int position) { 
     return 0; 
    } 

    @Override 
    public View getView(int position, View convertView, ViewGroup parent) { 

     System.gc(); 

     ImageView view; 

     if(convertView == null) { 

      view = new ImageView(context); 

      view.setScaleType(ImageView.ScaleType.FIT_CENTER); 
      view.setLayoutParams(new GridView.LayoutParams(screenWidth/4, screenHeight/4)); 
      view.setAdjustViewBounds(false); 
      view.setPadding(2, 2, 2, 2); 

      imageLoader.DisplayImage(urlList.get(position), view); 

      System.gc(); 

     }else { 
      view = (ImageView) convertView; 
     } 

     System.gc(); 

     return view; 
    } 

} 

А вот как я установил адаптер ниже,

GridView g = (GridView) findViewById(R.id.myGrid); 
     g.setAdapter(new GridGallery(context)); 

     isGalleryVisible = false; 

     g.setOnItemClickListener(new OnItemClickListener() { 

      public void onItemClick(AdapterView<?> parent, View v, int position, long id) { 

       myPagerAdapter = new MyPagerAdapter(context); 
       pager = (ViewPager) findViewById(R.id.gallery_view); 
       pager.setAdapter(myPagerAdapter); 
       pager.setCurrentItem(position); 

       isGalleryVisible = true; 

      } 
     }); 

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

Любая помощь будет оценена. Заранее спасибо.

ответ

3

Да, я столкнулся с той же проблемой прямо сейчас. Я также использую концепцию ленивой загрузки Fedor. Я не уверен, насколько это будет полезно, и будет ли это правильный подход. Но все же он решил проблему для меня.

я должен был сделать небольшое изменение в GetView(),

@Override 
    public View getView(int position, View convertView, ViewGroup parent) { 

     System.gc(); 

     ImageView view; 

     if(convertView == null) { 

      view = new ImageView(context); 

      view.setScaleType(ImageView.ScaleType.FIT_CENTER); 
      view.setLayoutParams(new GridView.LayoutParams(screenWidth/4, screenHeight/4)); 
      view.setAdjustViewBounds(false); 
      view.setPadding(2, 2, 2, 2); 



      System.gc(); 

     }else { 
      view = (ImageView) convertView; 
     } 
      if(view!=null) 
      { 
        imageLoader.DisplayImage(urlList.get(position), view); 
        notifyDataSetChanged(); //Calling this helped to solve the problem. 
      } 

     System.gc(); 

     return view; 
    } 
+0

Спасибо человек , Принял ваш ответ для вашего решения. Я хотел бы спросить что-то еще, связанное с этим, этот вид сетки довольно медленный, твой же? Знаете ли вы, как я могу сделать это быстрее? – osayilgan

+0

Я не уверен. Но я столкнулся с проблемой, когда пытался использовать изображения с огромным разрешением. Попробуйте масштабировать его. В любом случае, сетка BCoz будет иметь небольшую ширину и высоту, зачем использовать огромные изображения. –

+2

На самом деле я использую небольшие изображения, и я нашел проблему. Это было из-за сбора мусора. поскольку ленивая загрузка Fedor использует слабые ссылки, вызов System.gc() убивает кеш памяти. Вот почему Adapter пытается создать их каждый раз, когда я прокручиваю. – osayilgan

0

Я просто удалил

если (convertView == NULL) работает