[英]How Android ViewModel insures that, it has to bind with the same Activity or Fragment(in case of Screen Rotation)?
[英]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.