【发布时间】:2018-02-16 02:15:18
【问题描述】:
我正在使用底部导航视图。我有三个带有表单的选项卡。当用户转到另一个选项卡然后回来时,我想保留用户在字段中写的内容。 这是包含 BottomNavigationView 的 Activity。
public class MainActivity extends BaseActivity implements BottomNavigationView.OnNavigationItemSelectedListener {
@BindView(R.id.bottom_navigation)
BottomNavigationView navigation;
@BindView(R.id.toolbar)
Toolbar toolbar;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
initToolbar();
navigation.setOnNavigationItemSelectedListener(this);
//select first tab
navigation.setSelectedItemId(R.id.navigation_expiration_key);
}
@Override
protected void initializeDagger() {
((MainApplication) getApplicationContext()).getAppComponent().inject(this);
}
@Override
protected void initializePresenter() {
}
@Override
public int getLayoutId() {
return R.layout.activity_main;
}
@Override
public boolean onNavigationItemSelected(@NonNull MenuItem item) {
Fragment selectedFragment = null;
switch (item.getItemId()) {
case R.id.navigation_expiration_key:
selectedFragment = KeyExpirationFragment.newInstance();
break;
case R.id.navigation_place_identification:
selectedFragment = LockIdentificationFragment.newInstance();
break;
case R.id.navigation_bt_key:
selectedFragment = BtKeyValidationMenuFragment.newInstance();
break;
}
FragmentTransaction transaction = getSupportFragmentManager().beginTransaction();
transaction.replace(R.id.main_container, selectedFragment);
transaction.commit();
return true;
}
我尝试使用以下方法将状态保存在片段中:
@Override
public void onSaveInstanceState(@NonNull Bundle savedInstanceState) {
super.onSaveInstanceState(savedInstanceState);
savedInstanceState.putString(KEY_NUMBER, keyNumberField.getText().toString());
savedInstanceState.putString(CUSTOMER, customerField.getText().toString());
}
@Override
public void onActivityCreated(Bundle savedInstanceState) {
super.onActivityCreated(savedInstanceState);
if (savedInstanceState != null) {
String keyNumber = savedInstanceState.getString(KEY_NUMBER);
keyNumberField.setText(keyNumber);
String customer = savedInstanceState.getString(CUSTOMER);
customerField.setText(customer);
}
}
但在转到其他选项卡时永远不会调用 onSaveInstanceState。 我知道我们在浏览应用程序时不应该保存片段的状态。这被假装在 f.e. 时触发。手机旋转。
但是当我们使用 ViewPager 等保存状态时,应该有一种方法可以正确地保持这些状态。不使用共享首选项或错误修复。
问候。
【问题讨论】:
-
您在使用视图寻呼机吗?
-
完全没有。尽你所能。
标签: android bundle state bottomnavigationview