SavedState ViewModel Использование SavedStateViewModelFactory - PullRequest
1 голос
/ 14 января 2020

Я слежу за этим codelab от Google, но он не может сохранить данные. Вот ссылка

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);

Но ничего не получалось, когда я уничтожил приложение и открыл его обратно, данные все еще не сохраняются.

1 Ответ

0 голосов
/ 18 января 2020

Решение все еще находится в бета-версии для сохраненного состояния, заявленного Google. Пока единственное решение для сохранения данных - это использование Room.

...