2016-12-29 68 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

相關問題