我有一个ActionBar菜单图标,可以打开一个CategoryFragment. 该片段接受从另一个片段传递的category对象SafeArgs参数。在CategoryFragment我保存category的姓名和身份证到分享的内容片段ViewModel作为SavedStateHandle值。我已经对其进行了设置,以便片段SavedStateHandle在需要时使用类别名称和 ID的存储值。例如,第一次CategoryFragment使用从发送片段传递的类别对象,但随后的创建CategoryFrgament将使用这些SavedStateHandle值。
问题是,如果在第一次打开CategoriesFragment然后通过按下手机的物理后退按钮或从导航CategoryFragment栏中手机的最近按钮终止应用程序后退出应用程序,现在通过按下 ActionBar 菜单图标直接打开显示一个空白屏幕。这是因为从返回的值SavedStateHandle是空的。我怎样才能解决这个问题?
类别片段
class CategoryFragment : Fragment(), SearchView.OnQueryTextListener {
lateinit var navController: NavController
private var adapter: TasksRecyclerAdapter? = null
private val viewModel: CategoryTasksViewModel by activityViewModels()
private var fromCategoriesFragment: Boolean = false
override fun onCreateView(
inflater: LayoutInflater, container: ViewGroup?,
savedInstanceState: Bundle?
): View? {
// Inflate the …Run Code Online (Sandbox Code Playgroud) android android-savedstate android-architecture-components android-safe-args
我有一个屏幕,可以加载一堆请求并从同一屏幕上的用户和外部 WebView 收集一些数据。因此,我有一个包含这些复杂请求对象(+用户输入数据)的 ViewModel。我需要通过系统启动的进程死亡来持久保存这些数据,这SavedStateHandle是设计的目的。但我不想将这些数据保留在数据库中,因为它只与当前的用户体验相关。
我已将我的 ViewModel 与 Hilt 集成并收到了SaveStateHandle. 因为我有一些复杂的对象,可以在代码中的多个位置访问/修改它们,所以我无法“随时随地”保存它们。我让它们实现Parcelable,只是想立即保存它们。不幸的是,ViewModel 没有像onSaveInstanceState().
现在,我尝试使用onCleared()听起来像是写入句柄的好地方。但事实证明,.set()我在那里执行的所有操作都会丢失(我正在使用开发人员选项“不保留活动”进行测试。当我.set()在其他地方使用时,它确实有效)。因为 ViewModel 不依赖于单个片段/活动的生命周期,而是依赖于 NavGraph,所以我无法从它们的onSaveInstanceState().
我如何/在哪里可以正确地保留我的状态SaveStateHandle?
我创建了一个Android应用程序.使用按钮从库中选择图像并在ImageView中检索.图像提取成功.现在我想保存所选Image.It尝试修复的状态.它使崩溃应用程序.当我更改水平方向时,应用程序崩溃.请帮我解决问题.
我的代码:
public class MainActivity extends ActionBarActivity {
ImageView imgBackground;
Button loadImgBtn;
String imgDecodableString;
Drawable drawable;
private static int RESULT_LOAD_IMG = 1;
private static final String IMAGE_DATA = "image_resource";
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
loadImgBtn = (Button)findViewById(R.id.btnSelectImage);
imgBackground = (ImageView)findViewById(R.id.myImg);
loadImgBtn.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
/* Create intent to open Image Application like Gallery */
Intent galleryIntent = new Intent(Intent.ACTION_PICK, MediaStore.Images.Media.EXTERNAL_CONTENT_URI);
/* start the Intent */
startActivityForResult(galleryIntent,RESULT_LOAD_IMG);
}
});
}
@Override
protected void …Run Code Online (Sandbox Code Playgroud) 我在Android中的savedInstanceState中放置值有问题.我试图在互联网上找到解决方案,但我没有什么需要.也许有人知道哪里有问题.我需要将HashMap>放到savedInstanceState中,然后检索onCreate方法.有没有人有像这样的问题,谁知道我怎么能解决这个问题.谢谢你的时间.
我正在开发一些应用程序,我有一个问题.
我有:1.在FrameLayout中使用ListFragment的活动A(导航抽屉模式):xml:
<FrameLayout
...>
</FrameLayout>
<LinearLayout
...>
</LinearLayout>
</android.support.v4.widget.DrawerLayout>
Run Code Online (Sandbox Code Playgroud)
如何通过保存ListFragment的UI从活动B返回(使用导航按钮)到活动A(如果我使用Home Back返回,则重新创建活动).顺便说一句,如果我按下手机上的后退按钮,活动就不会重新创建并返回之前的状态.
android android-fragments android-activity android-navigation android-savedstate
据我所知,使用 Android Compose,
SavedStateHandle与生命周期和键值映射一起使用ViewModel并遵循生命周期和键值映射,它可以用作流程。ViewModel
rememberSaveable与可组合生命周期中的变量一起使用Composable并遵循可组合生命周期。
两者都用于在活动被系统破坏时防止数据丢失。
还有其他区别吗?
android android-savedstate android-viewmodel android-jetpack-compose
我按照下一页中的说明创建了一个 viewModel,但当SavedStateHandle我关闭应用程序并再次打开它时,它不起作用。
这是页面:
这是我的视图模型类:
class UserViewModel(private val state : SavedStateHandle) : ViewModel(){
val userId: LiveData<String> by lazy {
state.getLiveData("userId")
}
fun setUserId(userId : String) {
state["userId"] = userId
}
val user : User by lazy {
User("")
} }
Run Code Online (Sandbox Code Playgroud)
以下是我在活动中使用 viewModel 的方式。
val userViewModel : UserViewModel by viewModels()
Run Code Online (Sandbox Code Playgroud)
我什至在我的活动中尝试过这个,但这也不起作用!
val userViewModel: UserViewModel by viewModels {
SavedStateViewModelFactory(
application,
this
)
Run Code Online (Sandbox Code Playgroud)
我应该怎么做才能将数据持久化SavedStateHandle?我的意思是,打开应用程序后state仍然是空的。
如果我没有显式调用onSaveInstanceState(),哪些是可能性,何时savedInstanceState不为null onCreate?
我看到一个选项,当系统在崩溃后重新创建我的应用程序时 - 然后savedInstanceState不是null.
还有哪些其他选择?
android android-lifecycle android-activity android-bundle android-savedstate