Как сохранить тот же фрагмент, когда вращение меняется с использованием viewmodel? - PullRequest
0 голосов
/ 20 июня 2019

У меня есть нижняя навигационная панель с 3 кнопками (популярная, открыть, любимая).Каждый из них показывает свои собственные фрагменты (популярный фрагмент, обнаружение фрагмента, любимый фрагмент).Когда приложение запускается в первый раз, оно по умолчанию показывает популярный фрагмент, и если я нажимаю кнопки «Найти» или «Избранное», отображаются их собственные фрагменты, и это абсолютно то, чего я хочу, но проблема в том, что при изменении поворота популярный фрагмент снова отображается.

Я хочу решить эту проблему с ViewModel, но я совершенно новичок в архитектуре Android.Это мой код:

override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_main)
        val navView: BottomNavigationView = findViewById(R.id.nav_view)

        popularFragment = FragmentPopular()
        discoverFragment = FragmentDiscover()
        favoritesFragment = FragmentFavorites()

        setFragment(popularFragment)

        navView.setOnNavigationItemSelectedListener(onNavigationItemSelectedListener)
    }

    fun setFragment(fragment: Fragment){
        supportFragmentManager.beginTransaction().replace(R.id.frame_main, fragment).commit()
    }

Так как я могу решить эту проблему с помощью viewModel?

1 Ответ

0 голосов
/ 20 июня 2019

В вашем случае вы можете сделать это, поместив свои данные в пакет, а затем проверить пакет! = Null

@Override
public void onSaveInstanceState(Bundle outState)
{
    super.onSaveInstanceState(outState);
    outState.putString("name", "David");
    outState.putInt("age", 17);
}

Добавить эту проверку в свой onCreate ()

@Override
protected void onCreate(Bundle savedInstanceState)
{
    super.onCreate(savedInstanceState);
    …
    if(savedInstanceState != null)
    {
         savedInstanceState.getString("name");
         savedInstanceState.getInt("age");
    }
}

Или вы можете сделать это следующим образом:

Добавьте этот конфиг в вашу деятельность:

<activity android:name=".com.somepackage.MyActivity"
    android:configChanges="orientation|screenSize|keyboardHidden" > </activity>

Затем вы можете редактировать текстовые значения в onSaveInstanceState

@Override
public void onSaveInstanceState(@NonNull Bundle outState) {
    super.onSaveInstanceState(outState);
     outState.putCharSequence(KEY_TITLE, et_text.getText().toString());
 }

И получить свойсохраненные значения через onViewStateRestored

 @Override
public void onViewStateRestored(@Nullable Bundle savedInstanceState) {
    super.onViewStateRestored(savedInstanceState);

    String savedTitle = null;
    if (savedInstanceState != null) {
        savedTitle = savedInstanceState.getString(KEY_TITLE);
        et_text.setText(
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...