我有一项活动可能需要几秒钟才能从云端加载其内容(主要是图片)。让我们说这个内容是图片&一个人的描述。用户可以去图片&通过单击下一个按钮从另一个人的描述。我希望避免加载时间单击此按钮时。
为此,我有两个活动:第一人称内容的firstPersonActivity和第二人称内容的secondPersonActivity。 我尝试做的是在用户处于firstPersonActivity时加载secondPersonActivity的内容,以便可以直接显示secondPersonActivity" (=当在firstPersonActivity中单击下一个按钮时,无需从云中加载内容)。 但是我没有成功这样做,我不知道如何从firstPersonActivity类修改secondPersonActivity布局的视图。
我在我的firstPersonActivity中测试了以下代码,但它没有工作(没有与云连接,它只是一个测试,以更好地了解它是如何工作的)。 R.id.first_image_second_person是我在secondPersonLayout中的imageview的id(= secondPersonActivity中使用的布局)。
DataType
当我点击下一个按钮从firstPersonActivity转到secondPersonActivity时,我的firstImageSecondPerson图像视图未被填充。
你看到了什么错了吗? 当用户点击下一个按钮时,有没有更好的方法来避免加载时间?
答案 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);