5

私のアプリケーションでは、向きを変更すると、アクションバーで選択したタブが最初のタブに設定されます。選択したタブにとどまり、最初のタブにジャンプしないようにします...

4

3 に答える 3

25

実際には、onSavedInstanceStateを使用してこれを非常に簡単に行うことができます。

@Override
protected void onSaveInstanceState(Bundle outState) {
    super.onSaveInstanceState(outState);
    int i = getActionBar().getSelectedNavigationIndex();
    outState.putInt("index", i);
}

次に、これをonCreate()メソッドに含めます。

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
            ...
    if(savedInstanceState != null) {
        int index = savedInstanceState.getInt("index");
        getActionBar().setSelectedNavigationItem(index);
    }
}
于 2013-04-26T11:22:50.657 に答える
0

ツールバー付きの21歳以上の場合、これは私にとってはうまくいきます。

import android.support.v4.app.FragmentManager;
import android.support.v4.view.ViewPager;
import android.support.v7.app.ActionBar;
import android.support.v7.app.AppCompatActivity;
import android.support.v7.widget.Toolbar;

public class MainActivity extends AppCompatActivity {



   private ViewPager viewPager;
   private static final String FLAG_CURRENTLY_SELECTED_TAB_INDEX = "currentlySelectedTabIndex";

   @Override
   protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.mylayout);


        Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);
        setSupportActionBar(toolbar);

        ActionBar actionBar = getSupportActionBar();
        if (actionBar != null) {
            actionBar.setHomeAsUpIndicator(R.mipmap.ic_launcher);
            actionBar.setDisplayHomeAsUpEnabled(true);
        }

        viewPager = (ViewPager) findViewById(R.id.viewpager);
        FragmentManager fragmentManager = getSupportFragmentManager(); 
        viewPager.setAdapter(getMyCustomAdapter());            

        TabLayout tabLayout = (TabLayout) findViewById(R.id.tabs);
        tabLayout.setupWithViewPager(viewPager);     

        if (savedInstanceState != null) {
            final int currentlySelectedTabIndex = savedInstanceState.getInt(FLAG_CURRENTLY_SELECTED_TAB_INDEX, -1);
            if (currentlySelectedTabIndex > -1) {
                viewPager.setCurrentItem(currentlySelectedTabIndex);
            }
        }

    }

 @Override
    protected void onSaveInstanceState(Bundle outState) {
        super.onSaveInstanceState(outState); 

        if (viewPager != null) {
            int i = viewPager.getCurrentItem();
            outState.putInt(FLAG_CURRENTLY_SELECTED_TAB_INDEX, i);
        }
    }
于 2015-06-18T14:13:32.873 に答える
-1

非推奨になっているためgetLastNonConfigurationInstance()、FragmentActivityでonRetainCustomNonConfigurationInstance()をオーバーライドし、新しいgetLastCustomNonConfigurationInstance():を使用するだけです。

@Override
public Object onRetainCustomNonConfigurationInstance() {
    return mViewPager.getCurrentItem();
}

onCreate()次のように取得します。

Integer lastTab = (Integer) getLastCustomNonConfigurationInstance();
if (lastTab != null) {
    mViewPager.setCurrentItem(lastTab);
}
于 2013-02-28T19:35:59.870 に答える