我正在尝试改变方向。目前,当我旋转手机时,我的片段中的图像消失了。这显然是因为活动被销毁并重新创建。我没有尝试保存像图像这样的大数据,而是决定通过Uri在onSaveInstanceState方法中保存图像来解决这个问题:
@Override
public void onSaveInstanceState(@NonNull Bundle outState) {
super.onSaveInstanceState(outState);
outState.putParcelable("imageUri", imageUri);
}
Run Code Online (Sandbox Code Playgroud)
在我的片段中onCreateView,我尝试检索 Uri 并将其粘贴回ImageView,同时牢记空的可能性。
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
View view = inflater.inflate(R.layout.fragment_top_image, container, false);
imageView = view.findViewById(R.id.meme_image_view);
imageView.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
selectedImage(v);
}
});
topTextView = view.findViewById(R.id.top_text_view);
bottomTextView = view.findViewById(R.id.bottom_text_view);
if(savedInstanceState != null){
if(imageUri != null){
Uri savedUri = savedInstanceState.getParcelable("imageUri");
imageView.setImageURI(savedUri);
}
}
return view;
}
Run Code Online (Sandbox Code Playgroud)
由于某种原因,它不起作用。当我旋转手机时,图像仍然丢失。
完整片段:
public class …Run Code Online (Sandbox Code Playgroud) 我正在构建一个包含 2 个片段的应用程序。第一个片段有一个 ImageView 和 2 个 TextView,第二个片段有一组按钮和 EditText。在第二个片段中,我有一个名为“保存”的按钮。单击此按钮时,我想将第一个片段中的图像下载到我的设备文件夹中(ImageView、URI、位图和画布对象都在第一个片段中)。
由于片段无法直接相互通信,因此我正在考虑使用接口来实现这一点。我所做的是:
但我认为这不是正确的顺序,所以它不起作用也就不足为奇了。如何应用界面,以便单击第二个片段中的按钮下载第一个片段中的图像?
我刚刚构建了一个应用程序并将其部署到 Google Play。当我通过 Android Studio 运行它时它运行良好,但现在当我从 Google Play 下载它时它崩溃了。因为这是我第一次,我什至不知道如何查看从 Google Play 下载的应用程序的崩溃报告/堆栈跟踪。我感谢任何和所有的帮助。
更新
所以我得到了 APK 的堆栈跟踪。它告诉我我的TopImageFragment.java班级无法创建我的MemeViewModel.java班级。我不知道为什么会出现这个错误。一切都按原样运行良好。看来 proguard 确实正在逐步淘汰一个重要的类:
2019-04-18 00:46:32.062 8099-8099/? E/AndroidRuntime: FATAL EXCEPTION: main
Process: com.ozbek.onur.memegenerator, PID: 8099
java.lang.RuntimeException: Unable to start activity ComponentInfo{com.ozbek.onur.memegenerator/com.ozbek.onur.memegenerator.MainActivity}: java.lang.RuntimeException: Cannot create an instance of class com.ozbek.onur.memegenerator.MemeViewModel
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2853)
at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2928)
at android.app.ActivityThread.-wrap11(Unknown Source:0)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1609)
at android.os.Handler.dispatchMessage(Handler.java:105)
at android.os.Looper.loop(Looper.java:164)
at android.app.ActivityThread.main(ActivityThread.java:6703)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.Zygote$MethodAndArgsCaller.run(Zygote.java:240)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:769)
Caused by: java.lang.RuntimeException: Cannot create an instance of class com.ozbek.onur.memegenerator.MemeViewModel
at …Run Code Online (Sandbox Code Playgroud)