标签: android-savedstate

SavedStateHandle 返回空值

我有一个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

6
推荐指数
1
解决办法
793
查看次数

如何延迟保存ViewModel的SavedStateHandle?

我有一个屏幕,可以加载一堆请求并从同一屏幕上的用户和外部 WebView 收集一些数据。因此,我有一个包含这些复杂请求对象(+用户输入数据)的 ViewModel。我需要通过系统启动的进程死亡来持久保存这些数据,这SavedStateHandle是设计的目的。但我不想将这些数据保留在数据库中,因为它只与当前的用户体验相关。

我已将我的 ViewModel 与 Hilt 集成并收到了SaveStateHandle. 因为我有一些复杂的对象,可以在代码中的多个位置访问/修改它们,所以我无法“随时随地”保存它们。我让它们实现Parcelable,只是想立即保存它们。不幸的是,ViewModel 没有像onSaveInstanceState().

现在,我尝试使用onCleared()听起来像是写入句柄的好地方。但事实证明,.set()我在那里执行的所有操作都会丢失(我正在使用开发人员选项“不保留活动”进行测试。当我.set()在其他地方使用时,它确实有效)。因为 ViewModel 不依赖于单个片段/活动的生命周期,而是依赖于 NavGraph,所以我无法从它们的onSaveInstanceState().

我如何/在哪里可以正确地保留我的状态SaveStateHandle

android viewmodel android-savedstate viewmodel-savedstate

6
推荐指数
1
解决办法
3418
查看次数

如何在Android中为动态选择的图像创建savedInstanceState?

我创建了一个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)

java android drawable android-savedstate

5
推荐指数
1
解决办法
1472
查看次数

将HashMap <Integer,List <Integer >>放在savedInstanceState中

我在Android中的savedInstanceState中放置值有问题.我试图在互联网上找到解决方案,但我没有什么需要.也许有人知道哪里有问题.我需要将HashMap>放到savedInstanceState中,然后检索onCreate方法.有没有人有像这样的问题,谁知道我怎么能解决这个问题.谢谢你的时间.

android hashmap android-fragments android-savedstate

4
推荐指数
1
解决办法
1583
查看次数

Android - 从活动到片段的导航

我正在开发一些应用程序,我有一个问题.

我有:1.在FrameLayout中使用ListFragment的活动A(导航抽屉模式):xml:

    <FrameLayout
        ...>

    </FrameLayout>

    <LinearLayout
        ...>

    </LinearLayout>

</android.support.v4.widget.DrawerLayout>
Run Code Online (Sandbox Code Playgroud)
  1. 活动B,显示ListFragment中ListView的详细数据.

如何通过保存ListFragment的UI从活动B返回(使用导航按钮)到活动A(如果我使用Home Back返回,则重新创建活动).顺便说一句,如果我按下手机上的后退按钮,活动就不会重新创建并返回之前的状态.

android android-fragments android-activity android-navigation android-savedstate

4
推荐指数
1
解决办法
4326
查看次数

SavedStateHandle 和 RememberSaveable 之间有什么区别?

据我所知,使用 Android Compose,

SavedStateHandle与生命周期和键值映射一起使用ViewModel并遵循生命周期和键值映射,它可以用作流程。ViewModel

rememberSaveable与可组合生命周期中的变量一起使用Composable并遵循可组合生命周期。

两者都用于在活动被系统破坏时防止数据丢失。

还有其他区别吗?

android android-savedstate android-viewmodel android-jetpack-compose

4
推荐指数
1
解决办法
999
查看次数

SavedStateHandle不持久化数据

我按照下一页中的说明创建了一个 viewModel,但当SavedStateHandle我关闭应用程序并再次打开它时,它不起作用。

这是页面:

ViewModel 的已保存状态模块

这是我的视图模型类:

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仍然是空的。

android-savedstate android-viewmodel viewmodel-savedstate

3
推荐指数
1
解决办法
5667
查看次数

当savedInstanceState为非null时的情况

如果我没有显式调用onSaveInstanceState(),哪些是可能性,何时savedInstanceState不为null onCreate

我看到一个选项,当系统在崩溃后重新创建我的应用程序时 - 然后savedInstanceState不是null.

还有哪些其他选择?

android android-lifecycle android-activity android-bundle android-savedstate

1
推荐指数
1
解决办法
772
查看次数