如何:在列表中添加类属性

时间:2014-06-06 15:36:10

标签: java list class

我有List<Presenter> presenterList;

public class Presenter(){
  String name;
  String imageRef; // Filename to be downloaded
  Bitmap image;

  (etc...)
}

我正在使用AsyncTask&amp;一旦图像下载完毕,我希望浏览列表并将Image值设置为新下载的图像。 到目前为止我有

Presenter pres = PresenterList.get(Position);
pres.Image = new (Bitmap) downloadedImageFromImageRef;

但是我担心这与列表中的演示者的图像值无关。

如何引用,甚至分配给列表中的特定Presenter属性?

从使用C(多年前)开始,我相信某事物就像指向要分配的值的指针.Image会起作用

谢谢你的推荐

2 个答案:

答案 0 :(得分:2)

好吧,如果你有C经验,那么了解Java的一点是它不使用指针,但确实使用了引用。因此,如果我正确理解您的问题,您已经在其他地方使用了Image实例的Presenter属性,那么您希望稍后填写它。在这种情况下,分配pres.Image = new (Bitmap) DownloadedImageFromImageRef;将不起作用,因为其他对象正在查看不同的Bitmap对象引用。

您可能需要做的是使用观察者模式 - 这取决于您的问题的详细信息。这是一个例子:

在代码的某处,我有一个类Foo,希望使用Image实例中的Presenter属性。但是,由于该属性直到稍后才设置,因此该类希望在准备就绪时得到通知(它是观察者)。

public class Presenter {
  String Name;
  String ImageRef; // Filename to be downloaded
  private Bitmap Image;

  private PresenterImageObserver observer;

  public void setImageObeserver(PresenterImageObserver pio) {
    this.observer = pio;
  }

  public void setImage(Bitmap b) {
    this.Image = b;
    this.observer.imageLoaded(b);
  }
}

public interface PresenterImageObserver {
  public void imageLoaded(Bitmap b);
}

public class Foo implements PresenterImageObserver {
  //Foo's constructor. It wants the image from presenter p, when it is ready
  public Foo(Presenter p) {
    p.setImageObserver(this);
  }

  public void imageLoaded(Bitmap b) {
    //b contains the loaded image and this Foo instance can use it now!
  }
}

您需要使用pres.setImage(new (Bitmap) downloadedImageFromImageRef);设置图片。

答案 1 :(得分:1)

因此,您必须在列表中找到正确imageref的Presenter。你基本上有两种选择。

首先,您只需遍历列表

for (Presenter presenter: presenterList) {
    if (presenter.imageref.equals(imageName) {
        Presenter.image = new Bitmap(downloadedImage);
        break; // found : stop iterations
    }
}

其次,您可以为您的演示者创建HashMap,并将imageref作为关键字:

HashMap<String, Presenter> map = new HashMap<>();
for (Presenter presenter: presenterList) {
    map.put(presenter.imageref, presenter);
}

然后,您可以通过map.get(imageName)

直接找到合适的演示者