簡體   English   中英

使用viewmodel旋轉變化時如何保持相同的片段?

[英]How to keep the same fragment when rotation changes with using viewmodel?

我有一個底部導航視圖,上面有3個按鈕(受歡迎,發現,收藏)。 每個片段都顯示自己的片段(popularFragment,discoverFragment,favoriteFragment)。 當應用程序首次運行時,默認情況下會顯示PopularFragment,如果我單擊“發現”或“收藏夾”按鈕,則會顯示他們自己的片段,這絕對是我想要的,但是問題是如果旋轉發生變化,popularFragment會再次顯示。

我想用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解決這個問題呢?

在您的情況下,您可以將數據放入包中,然后檢查包!= 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(
    }
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM