2016-12-29 69 views
1

我有一个活动可能需要几秒钟的时间从云端加载它的内容(主要是图片)。假设这个内容是图片&从一个人的描述。用户可以通过点击下一个按钮去从另一个人的照片&描述。我想避免加载时间点击此按钮。如何更改Android中的其他活动的文字和图像查看

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

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

ImageView firstImageSecondPerson = (ImageView) findViewById(R.id.first_image_second_person); 

firstImageSecondPerson.setImageResource(R.drawable.mypicture); 

当我上单击下一步按钮从firstPersonActivity到secondPersonActivity去,我firstImageSecondPerson ImageView的不填充。

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

回答

0

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

但是,如果第二个活动必须在那里,然后创建一些结构来保存位图在内存中。在您的代码示例中,您从drawable获取图片,因此我们不是在谈论某些延迟,但是如果图像是从某个服务器下载的,那么您可以创建一些类,这些类会使用url创建这些位图,并且可以使用此类的任何实例活动。

因此,例如你的缓存图片类会有一些创建位图的方法 - How to load an ImageView by URL in Android?。和那些位图应该被保存在一些阵列或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); 

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

+0

谢谢,我已经试过了隐藏和显示方法,并加载我的图片与滑翔,它就像一个魅力:) – Alex9494

+0

@ Alex9494欢迎您 –

0

在创建之前,您无法访问SecondActivity的视图。如果您只调用过一次该活动,那么您可以通过将其视图设为静态来访问其视图。

对此的另一个解决方案是...... 一次访问整个数据并在getter-setters的帮助下将其保存在静态数组列表中。然后在SecondActivity上设置该数组列表的数据。

希望这会起作用。

0

我认为您在创建活动之前无法访问该视图。 您可以尝试使用Glide来缓存图像并尽量减少加载时间。

0

尝试在一个单一的活动这一

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

imageView.setImageDrawable(ActivityCompat.getDrawable(getContext(), 
       R.drawable.generatedID));` 
+0

请在提交之前正确设置您的答案的格式。另外,您还应该添加一段说明,解释为什么以及如何使用此代码来解决问题。 – BDL

相关问题