我的Activity中有一个位图图像,如下所示:
Bitmap image4 = BitmapFactory.decodeResource(getResources(), R.drawable.hello);
image1.setImageBitmap(image4);
我试图使用此代码在片段中传递此图像:
FragmentManager fragmentManager = getFragmentManager();
FragmentTransaction fragmentTransaction = fragmentManager.beginTransaction();
fragmentTransaction.addToBackStack(null);
Secondfrag yourFragment = new Secondfrag();
Bundle b = new Bundle();
b.putParcelable("BitmapImage",image4);
yourFragment.setArguments(b);
fragmentTransaction.add(R.id.frag, yourFragment, "FRAGMENT");
fragmentTransaction.commit();
并尝试将此图像放入片段中,如下所示:
Bundle b=this.getArguments();
String page=b.getString("BitmapImage");
image2.setImageURI(Uri.parse(page));
但我的片段中没有图像显示。如何解决此问题?
答案 0 :(得分:2)
将其转换为字节数组
import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.Transaction;
import org.hibernate.context.internal.ManagedSessionContext;
public class TransactionManager {
public static <T> T doInTransaction(TransactionCallable<T> callable) throws Exception {
T result = null;
Session session = null;
Transaction txn = null;
SessionFactory sessionFactory = ApplicationContext.get().getSessionFactory();
try {
session = sessionFactory.openSession();
txn = session.beginTransaction();
ManagedSessionContext.bind(session);
result = callable.execute();
txn.commit();
} catch (RuntimeException e) {
if (txn != null && txn.isActive())
txn.rollback();
throw e;
} catch (Exception e) {
if (txn != null && txn.isActive())
txn.rollback();
throw new Exception("TransactionManager failure.");
} finally {
if (session != null) {
session.close();
ManagedSessionContext.unbind(sessionFactory);
}
}
return result;
}
}
TransactionManager.doInTransaction(new TransactionCallable<Connection>() {
@Override
public Connection execute() throws Exception {
return dao.getById(id);
}
});
从目标片段获取值
ByteArrayOutputStream stream = new ByteArrayOutputStream();
bmp.compress(Bitmap.CompressFormat.PNG, 100, stream);
byte[] byteArray = stream.toByteArray();
Bundle b = new Bundle();
b.putByteArray("image",byteArray);
// your fragment code
fragment.setArguments(b);
答案 1 :(得分:0)
传递图像参考是一种好方法,而不是传递整个图像数据。
在您的情况下,您可以传递图片Uri
如果您想从内部存储中获取图像,可以通过Uri
。但是,如果你只想要一个特定的资源(即drawable
),它就可以传递它的名字(String
)。
您可以查看此解决方案Passing Uri to an Intent
答案 2 :(得分:0)
您可以在包中传递图像路径/ URI。
在您的情况下,您正在使用资源来制作位图。您可以使用相同的代码来获取片段中的位图。片段中的资源可用作getActivity()。getResources();
Bitmap image4 = BitmapFactory.decodeResource(getActivity().getResources(), R.drawable.hello);
image1.setImageBitmap(image4);
答案 3 :(得分:0)
请尝试此方法
private void nextpageintent(String photoUri){
Bundle bundle = new Bundle();
bundle.putString("photo", photoUri);
picture picture = new picture();
picture .setArguments(bundle);
FragmentTransaction transaction = null;
transaction = getFragmentManager().beginTransaction();
transaction.replace(R.id.container, picture);
transaction.addToBackStack(null);
transaction.commit();
}
答案 4 :(得分:0)
在这里,您可以使用Singleton类的getter setter简单地解决这个问题, 首先为你的位图存储制作一个Ben类。
class BitmapStorage {
private static volatile BitmapStorage instance = null;
private Bitmap bitmap = null;
private BitmapStorage () {}
public static BitmapStorage getInstance() {
if (instance == null) {
synchronized(BitmapStorage.class) {
if (instance == null) {
instance = new BitmapStorage();
}
}
}
return instance;
}
public Bitmap getBitmap(){
return bitmap;
}
public void setBitmap(Bitmap bitmap){
this.bitmap = bitmap;
}
}
然后在您的活动中将位图设置为您的模型类。像
BitmapStrorage bs = getInstance ();
Bitmap image4 = BitmapFactory.decodeResource(getResources(), R.drawable.hello);
Bs.setBitmap(image4);
每当根据片段生命周期调用片段然后OnCreate方法首先调用,所以在这里我们可以检查位图是否为null并获取位图并使用它。可能不会检查这个解决方案,但我认为这对你有用。
答案 5 :(得分:-1)
投票 Zeerak Hameem 你应该以不同的方式思考