[英]Android pass Bitmap between fragments
我見過類似的問題,但其中大多數都顯示了在活動之間傳遞位圖。 參考此問題,已接受的答案不建議在兩個活動之間傳遞位圖時使用 bundle,而是建議使用 Intent Extras。 但是因為我試圖在片段之間傳遞位圖,而不是活動,所以我不能使用意圖並且不知道除了包之外還有什么可以使用。 這是我在片段之間傳遞位圖的操作:我通過一個接口將位圖傳遞給活動,然后將它傳遞給該接口內的其他片段。
//MyActivity.java
@Override
public void onMyFragmentFired(Bitmap bitmap) {
FragmentTransaction ft=getSupportFragmentManager().beginTransaction();
args=new Bundle();
fragment = MyFragment.newInstance();
if(bitmap != null){
args.putParcelable("EXTRA_BITMAP", bitmap);
}
fragment.setArguments(args);
ft.add(fragment, "com.example.myfragment");
ft.commit();
}
我想知道如果位圖太大等我是否會遇到任何問題。有沒有更好的方法來做到這一點?
謝謝
您可以將位圖添加到 newInstance 函數中。
所以你可以有
Bitmap mBitmap;
public static newInstance(Bitmap b)
{
mBitmap = b;
}
並調用
if(bitmap!=null)
{
fragment = MyFragment.newInstance(bitmap);
}
在片段的構造函數中也添加一個位圖變量。
遲到的答復。 但可以幫助別人。
另一種可以測試的方法是將您的位圖轉換為 Base64 字符串。 然后在創建片段時將其發送到片段。
編碼位圖
ByteArrayOutputStream byteArrayOutputStream = new ByteArrayOutputStream();
bitmap.compress(Bitmap.CompressFormat.PNG, 100, byteArrayOutputStream);
byte[] byteArray = byteArrayOutputStream .toByteArray();
String encodedBitmap = Base64.encodeToString(byteArray, Base64.DEFAULT);
上面的代碼將創建一個你可以使用的長字符串。
然后你可以將它作為一個 bundle 參數在片段newInstance()
函數中傳遞。
然后你可以再次解碼字符串以獲取位圖圖像
解碼圖像
byte[] decodedString = Base64.decode(encodedBitmap, Base64.DEFAULT);
Bitmap decodedBitmap = BitmapFactory.decodeByteArray(decodedString, 0, decodedString.length);
我設法使用Android 架構組件傳遞位圖,並在片段之間共享ViewModel ,如有關在片段之間共享數據的官方文檔中所述。 我不知道這是否是最佳實踐,但對於我的用例來說它有效。
我有很多關於將數據傳遞給活動或片段的問題。 結果,我讓 DataCache 在任何地方傳遞任何對象。
但我從未嘗試過在片段之間傳遞位圖。 我認為這對你有用。 這是一個超級簡單的例子。 Gihub: https : //github.com/kimkevin/cachepot
發件人的片段
public class FragmentA {
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
DataCache.getInstance().push(yourBitmap);
}
}
接收器的片段
public class FragmentB {
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
Bitmap yourBitmap = DataCache.getInstance().pop(Bitmap.class);
}
}
試試吧:我希望你能幫上忙。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.