2016-02-29 77 views
1

我一直在这个问题上工作了好几天了。我正在使用kankan Android轮子示例/库,但我想在按下按钮时动态地将图像添加到轮子。添加的图像取决于按钮的文本。这似乎是一个相当简单的任务,但也许我错过了一些东西。在传递并将选定图像添加到适配器的缓存图像列表后,我尝试调用适配器的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