Tôi đang có điều hướng thả xuống của thanh tác vụ. Vấn đề là khi tôi chuyển sang một đoạn khác, sau đó thực hiện một thay đổi định hướng, nó đặt mảnh đầu tiên bên trong anyways, mặc dù tôi nghĩ rằng tôi đang lưu saveInstanceState một cách chính xác. Vấn đề có vẻ là onNavigationItemSelected được gọi, vì vậy .. làm thế nào tôi sẽ xử lý chính xác điều này? Tôi có thể làm biến savedInstanceState một lĩnh vực, nhưng điều đó chỉ cảm thấy sai ...Điều hướng thả xuống của ActionBar - thay đổi hướng đặt sai phân đoạn trong
public class MainActivity extends FragmentActivity implements MyListFragment.OnArticleSelectedListener {
public static final String TAG = "MainActivity";
@SuppressLint("NewApi")
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
if(savedInstanceState != null) {
Fragment savedFragment = getSupportFragmentManager().getFragment(savedInstanceState, "saved_fragment");
Log.d(MainActivity.TAG, "savedInstanceState != null: " + savedFragment.getTag());
getSupportFragmentManager()
.beginTransaction()
.replace(R.id.fragment_container, savedFragment, savedFragment.getTag())
.commit();
} else {
Log.d(MainActivity.TAG, "savedInstanceState == null");
getSupportFragmentManager()
.beginTransaction()
.replace(R.id.fragment_container, new MyListFragment(), MyListFragment.TAG)
.commit();
}
ActionBar actionBar = getActionBar();
actionBar.setDisplayShowTitleEnabled(false);
actionBar.setNavigationMode(ActionBar.NAVIGATION_MODE_LIST);
String[] array = new String[] { "Inzeráty", "Dummy frag" };
SpinnerAdapter mSpinnerAdapter = new ArrayAdapter<String>(this, android.R.layout.simple_spinner_dropdown_item,
array);
actionBar.setListNavigationCallbacks(mSpinnerAdapter, new ActionBar.OnNavigationListener() {
@Override
public boolean onNavigationItemSelected(int itemPosition, long itemId) {
Log.d(MainActivity.TAG, "onNavitagionItemSelected");
FragmentTransaction transaction = getSupportFragmentManager().beginTransaction();
switch(itemPosition) {
case 0:
transaction.replace(R.id.fragment_container, new MyListFragment(), MyListFragment.TAG);
break;
case 1:
transaction.replace(R.id.fragment_container, new MyDummyFragment(), MyDummyFragment.TAG);
break;
}
transaction.commit();
return true;
}
});
}
@Override
public void onArticleSelected(Bundle bundle) {
Log.d(MainActivity.TAG, "MainActivity # onArticleSelected");
Intent intent = new Intent(this, DetailActivity.class);
intent.putExtras(bundle);
startActivity(intent);
}
@Override
protected void onSaveInstanceState(Bundle outState) {
Fragment currentFragment = getSupportFragmentManager().findFragmentById(R.id.fragment_container);
Log.d(MainActivity.TAG, "MainActivity # onSaveInstanceState: " + currentFragment.getTag());
getSupportFragmentManager().putFragment(outState, "saved_fragment", currentFragment);
super.onSaveInstanceState(outState);
}
}
Xin chào, những gì tôi thực sự đã làm là duy trì chỉ mục của mục được chọn trong trình đơn thả xuống trong lưu trữ được lưu trữ – urSus
Tôi cũng đang làm điều này (thực sự tôi đã lưu trữ chỉ mục dưới dạng SharedPreference để nó có thể được sử dụng khi khởi động ứng dụng nếu nó đã được mở sau đó khi không còn chạy trong bộ nhớ). Vấn đề tôi phải đối mặt là có một chút khác biệt ở chỗ mảnh nhìn thấy được có thể bắt đầu một mảnh con khác. Khi quay, nó sẽ quay trở lại đoạn cha mẹ thay vì đứa trẻ, đoạn mã trên cho phép tôi làm việc xung quanh vấn đề thứ hai đó. –
Điều này làm cho đoạn sai được hiển thị trong trình đơn thả xuống trên thanh hành động. – howettl