如何更改textviews& Android中另一项活动的图片视图

时间:2016-12-29 12:30:39

标签: android android-activity imageview

我有一项活动可能需要几秒钟才能从云端加载其内容(主要是图片)。让我们说这个内容是图片&一个人的描述。用户可以去图片&通过单击下一个按钮从另一个人的描述。我希望避免加载时间单击此按钮时。

为此,我有两个活动:第一人称内容的firstPersonActivity和第二人称内容的secondPersonActivity。 我尝试做的是在用户处于firstPersonActivity时加载secondPersonActivity的内容,以便可以直接显示secondPersonActivity" (=当在firstPersonActivity中单击下一个按钮时,无需从云中加载内容)。 但是我没有成功这样做,我不知道如何从firstPersonActivity类修改secondPersonActivity布局的视图。

我在我的firstPersonActivity中测试了以下代码,但它没有工作(没有与云连接,它只是一个测试,以更好地了解它是如何工作的)。 R.id.first_image_second_person是我在secondPersonLayout中的imageview的id(= secondPersonActivity中使用的布局)。

DataType

当我点击下一个按钮从firstPersonActivity转到secondPersonActivity时,我的firstImageSecondPerson图像视图未被填充。

你看到了什么错了吗? 当用户点击下一个按钮时,有没有更好的方法来避免加载时间?

4 个答案:

答案 0 :(得分:0)

在创建SecondActivity之前,您无法访问它们。如果您只调用此活动一次,则可以通过将其视为静态来访问其视图。

另一个解决方案是...... 在getter-setters的帮助下,立即访问整个数据并将其保存在静态arraylist中。然后在SecondActivity上设置该arraylist的数据。

希望这会奏效。

答案 1 :(得分:0)

如果未创建活动实例,则无法更改活动。在我看来,做你需要的东西我会去隐藏第二人的内容(VIEW.INVISIBLE)的单一活动,并在需要时显示/隐藏它。

但是如果必须存在第二个活动,那么创建一些用于在内存中保存位图的结构。在你的代码示例中你从drawable得到图片所以我们不是在讨论一些延迟,但如果从某个服务器下载图像,那么你可以创建一些类,这些类将使用url创建这些位图,并且可以在任何类上使用该类的实例活动。

因此,例如,用于缓存图片的类将有一些创建位图的方法,如 - How to load an ImageView by URL in Android?。这些位图应保存在某些Array或HashMap中以便访问它,例如(伪代码):

//some structure for cashing pictures in app
class PictureCache {   

  static PictureCache instance;
  final HashMap<Integer, Bitmap> bitmaps;

  //singleton
  static PictureCache getInstance(){

    if (instance==null)
      instance = new PictureCache();

    return instance;

  }

  public PictureCache(){

    bitmaps = new HashMap<>;
  }

  private Bitmap loadBitmap(String url);//#1

  public addPicture(Integer personId, String href){
     //add to hashMap 
     bitmaps.put(personId, loadBitmap(href));
  }

  public Bitmap getPicture(Integer personId){

     return bitmaps.get(personId);
  }

} 

#1 - 来自How to load an ImageView by URL in Android?

的方法

在第一项活动中使用它:

PictureCache.getInstance().addPicture(12,"http://url.to.bitmap");

在第二项活动中使用它:

Bitmap pic = PictureCache.getInstance().getPicture(12);

重要提示 - 上面的代码是在这里编写的,未经过测试,它显示了解决方案的概念。 重要的第二个注释 - 在内存中使用这种带位图的方法会导致大量内存使用

答案 2 :(得分:0)

我认为您无法在创建活动之前访问该视图。 您可以尝试使用Glide来缓存图片并最大限度地缩短加载时间。

答案 3 :(得分:0)

试试这个

0

Picasso.with(getContext()).load(R.drawable.generatedId).into(imageView);