2017-11-10 5 views
0

BottomNavigationView를 사용하고 있습니다. 양식이있는 탭이 세 개 있습니다. 사용자가 다른 탭으로 이동 한 다음 다시 올 때 필드에 쓴 내용을 유지하려고합니다. BottomNavigationView가 포함 된 활동입니다.BottomNavigationView를 사용하여 조각 상태 저장

@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가 호출되지 않습니다 :

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

나는이를 사용하여 조각에 상태를 저장하려고했습니다. 앱을 탐색 할 때 파편 상태를 저장해서는 안된다는 것을 알고 있습니다. 그리고 이것은 f. 전화가 회전합니다.

그러나 우리는 ViewPager 등으로 상태를 저장하므로 이러한 상태를 올바르게 유지하는 방법이 있어야합니다. 공유 환경 설정 또는 불량 수정을 사용하지 않습니다.

감사합니다.

+0

보기 호출기를 사용하고 있습니까? –

+0

전혀 아님. 당신이 볼 수있는 모든 것. – Rober

답변

0

본인이 직접 찾고 있습니다. 나는이 두 가지 방법을 모두 보았으므로 확신 할 수는 없지만 다른 사람들을 따라 슈퍼 라인이 필요하다고 생각합니다. 이와 같이 :

public void onSaveInstanceState(@NonNull Bundle savedInstanceState) {   
    savedInstanceState.putString(KEY_NUMBER, keyNumberField.getText().toString()); 
    savedInstanceState.putString(CUSTOMER, customerField.getText().toString()); 
    super.onSaveInstanceState(savedInstanceState); 
} 

편집 2 : 대신 RayWenderlich 튜토리얼을 통해 조각을 시도 할 것입니다. https://www.raywenderlich.com/169885/android-fragments-tutorial-introduction-2