2016-02-29 3 views
1

Я работаю над этой проблемой в течение нескольких дней. Я использую пример/библиотеку kankan Android wheel, но я хочу динамически добавлять изображения в колесо при нажатии кнопки. Добавленное изображение зависит от текста кнопки. Это кажется довольно простой задачей, но, возможно, мне что-то не хватает. Я пробовал вызывать notifyDataChangedEvent() адаптера после передачи и добавления выбранного изображения в список кэшированных изображений адаптера. Отладка показала, что изображения добавляются в список изображений, но они не отображаются на колесе. Если бы кто-то мог помочь мне справиться с этой проблемой, я был бы признателен!Динамически добавлять изображения в Android WheelView

Код:

public void addItem(String text) { 

    for(Item c: Item.values()){ 
     if(c.getName().equals(text)) { 
      slotMachineAdapter.addImage(c.getImage()); 
      break; 
     } 
    } 
    slotMachineAdapter.notifyDataChangedEvent(); 
} 

адаптер

private class SlotMachineAdapter extends AbstractWheelAdapter { 
    // Image size 
    final int IMAGE_WIDTH = 700; 
    final int IMAGE_HEIGHT = 150; 

    // Slot machine symbols 
    private final int items[] = new int[] { 
      R.mipmap.ic_flipper 
    }; 

    // Cached images 
    private List<SoftReference<Bitmap>> images; 

    // Layout inflater 
    private Context context; 

    /** 
    * Constructor 
    */ 
    public SlotMachineAdapter(Context context) { 
     this.context = context; 
     images = new ArrayList<SoftReference<Bitmap>>(); 
     for (int id : items) { 
      images.add(new SoftReference<Bitmap>(loadImage(id))); 
     } 
    } 

    /** 
    * Loads image from resources 
    */ 
    private Bitmap loadImage(int id) { 
     Bitmap bitmap = BitmapFactory.decodeResource(context.getResources(), id); 
     Bitmap scaled = Bitmap.createScaledBitmap(bitmap, IMAGE_WIDTH, IMAGE_HEIGHT, true); 
     bitmap.recycle(); 
     return scaled; 
    } 

    @Override 
    public int getItemsCount() { 
     return items.length; 
    } 

    // Layout params for image view 
    final ViewGroup.LayoutParams params = new ViewGroup.LayoutParams(IMAGE_WIDTH, IMAGE_HEIGHT); 

    @Override 
    public View getItem(int index, View cachedView, ViewGroup parent) { 
     ImageView img; 
     if (cachedView != null) { 
      img = (ImageView) cachedView; 
     } else { 
      img = new ImageView(context); 
     } 
     img.setLayoutParams(params); 
     SoftReference<Bitmap> bitmapRef = images.get(index); 
     Bitmap bitmap = bitmapRef.get(); 
     if (bitmap == null) { 
      bitmap = loadImage(items[index]); 
      images.set(index, new SoftReference<Bitmap>(bitmap)); 
     } 
     img.setImageBitmap(bitmap); 

     return img; 
    } 

    //Adds image to list of images 
    public void addImage(int img){ 
     images.add(new SoftReference<Bitmap>(loadImage(img))); 
    } 
} 

ответ

0

Поскольку граф вы вернуть ссылки на items переменной, но addImage функция не изменилась items размер. Попробуйте изменить свой код, как показано ниже, и снова проверить его:

@Override 
    public int getItemsCount() { 
     return images.size(); 
    } 
+0

Я знал, что это будет так просто! Я чувствую себя таким глупым. Большое спасибо John Steve – Elli

+0

Когда так устали, просто отдохните, и все будет в порядке: D – NamNH

Смежные вопросы