【问题标题】:SavedState ViewModel Using SavedStateViewModelFactorySavedState ViewModel 使用 SavedStateViewModelFactory
【发布时间】:2020-04-30 20:28:54
【问题描述】:

我正在关注谷歌的这个 codelab,但它未能保存数据。这是链接

https://codelabs.developers.google.com/codelabs/android-lifecycles/#6

活动类

public class SavedStateActivity extends AppCompatActivity {

    private SavedStateViewModel mSavedStateViewModel;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.saved_state_activity);

        // Obtain the ViewModel
        // mSavedStateViewModel = new ViewModelProvider(this).get(SavedStateViewModel.class);
        mSavedStateViewModel = new ViewModelProvider(this,new SavedStateViewModelFactory(getApplication(),this)).get(SavedStateViewModel.class);

        // Show the ViewModel property's value in a TextView
        mSavedStateViewModel.getName().observe(this, new Observer<String>() {
            @Override
            public void onChanged(String savedString) {
                ((TextView)findViewById(R.id.saved_vm_tv))
                        .setText(getString(R.string.saved_in_vm, savedString));

            }
        });

        // Save button
        findViewById(R.id.save_bt).setOnClickListener(new OnClickListener() {
            @Override
            public void onClick(View v) {
                String newName = ((EditText)findViewById(R.id.name_et)).getText().toString();
                mSavedStateViewModel.saveNewName(newName);

            }
        });
    }
}

视图模型类

public class SavedStateViewModel extends ViewModel {

    private static final String NAME_KEY = "name";

    private SavedStateHandle mState;

    public SavedStateViewModel(SavedStateHandle savedStateHandle) {
        mState = savedStateHandle;
    }

    // Expose an immutable LiveData
    LiveData<String> getName() {
        // getLiveData obtains an object that is associated with the key wrapped in a LiveData
        // so it can be observed for changes.
        return mState.getLiveData(NAME_KEY);
    }

    void saveNewName(String newName) {
        // Sets a new value for the object associated to the key. There's no need to set it
        // as a LiveData.
        mState.set(NAME_KEY, newName);
    }
}

如您所见,我已经添加了SavedStateViewModelFactory mSavedStateViewModel = new ViewModelProvider(this,new SavedStateViewModelFactory(getApplication(),this)).get(SavedStateViewModel.class);

但是当我销毁应用程序并重新打开它时,数据仍然没有保留。

【问题讨论】:

  • 我目前正在努力解决类似的问题

标签: java android mvvm viewmodel


【解决方案1】:

Google 所说的保存状态的解决方案仍处于测试阶段。目前,唯一持久化数据的解决方案是使用 Room。

【讨论】:

    猜你喜欢
    • 2020-03-27
    • 2021-07-11
    • 1970-01-01
    • 2022-12-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-04-02
    • 2021-06-05
    相关资源
    最近更新 更多