Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/311.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 带有片段方向更改保留值的Android actionbar_Java_Android_Android Fragments_Android Orientation - Fatal编程技术网

Java 带有片段方向更改保留值的Android actionbar

Java 带有片段方向更改保留值的Android actionbar,java,android,android-fragments,android-orientation,Java,Android,Android Fragments,Android Orientation,我知道有很多话题都在关注这个问题。但是还没有合适的 举个简单的例子: 主要活动 public class MainActivity extends Activity { private static final String STATE_SELECTED_NAVIGATION_ITEM = "selected_navigation_item"; @Override public void onCreate(Bundle savedInstanceState) { super.o

我知道有很多话题都在关注这个问题。但是还没有合适的

举个简单的例子:

主要活动

public class MainActivity extends Activity {    
private static final String STATE_SELECTED_NAVIGATION_ITEM = "selected_navigation_item";

@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    final ActionBar actionBar = getActionBar();
    actionBar.setNavigationMode(ActionBar.NAVIGATION_MODE_TABS);

    ActionBar.Tab a = actionBar.newTab().setText("eins");
    ActionBar.Tab b = actionBar.newTab().setText("zwei");

    Fragment f1 = new MyFriendsListFragment();
    Fragment f2 = new SecondTabfrag();

    a.setTabListener(new myTabListener(f1, getApplicationContext()));
    b.setTabListener(new myTabListener(f2, getApplicationContext()));

    actionBar.addTab(a);
    actionBar.addTab(b);

}

@Override
public void onRestoreInstanceState(Bundle savedInstanceState) {
    if (savedInstanceState.containsKey(STATE_SELECTED_NAVIGATION_ITEM)) {
        getActionBar().setSelectedNavigationItem(
                savedInstanceState.getInt(STATE_SELECTED_NAVIGATION_ITEM));
    }
}

@Override
public void onSaveInstanceState(Bundle outState) {
    super.onSaveInstanceState(outState);
    outState.putInt(STATE_SELECTED_NAVIGATION_ITEM, getActionBar()
            .getSelectedNavigationIndex());

}

}

class myTabListener implements TabListener {
Fragment fragment;
Context con;

myTabListener(Fragment f, Context c) {
    fragment = f;
    con = c;
}

@Override
public void onTabReselected(Tab tab, FragmentTransaction ft) {

}

@Override
public void onTabSelected(Tab tab, FragmentTransaction ft) {
    ft.replace(R.id.container, fragment);
}

@Override
public void onTabUnselected(Tab tab, FragmentTransaction ft) {
    ft.remove(fragment);
}

}
第一个片段只包含一个不相关的列表,我的第二个选项卡如下所示

public class SecondTabfrag extends Fragment {
TextView t;
int i = 10;


@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setRetainInstance(true);
}

@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
        Bundle savedInstanceState) {

    View V = inflater.inflate(R.layout.secondtabfragment, container, false);
    t = (TextView) V.findViewById(R.id.texfield);

    t.setText(i + "");

    Button b = (Button) V.findViewById(R.id.btn);

    b.setOnClickListener(new OnClickListener() {

        @Override
        public void onClick(View v) {
            i=20;
        }
    });
    return V;
}
}
这个想法是:我得到一个按钮,当我按下它时,我的变量得到值20。如果我重新切换选项卡,将显示新值。这很好,但如果我更改方向,值始终为10。因此,由于片段的生命周期,该变量将丢失其值。那么我能做些什么来保存我的价值呢?我尝试了太多关于getArguments、bundle和SavedInstanceInstance的教程……但不幸的是,我没能像上面描述的那样工作:(

问候
Hamzty

所以问题是,在切换选项卡后,onCreateView(…)被调用了2次-第一轮可以使用onSavedInstance加载保存的值,但它们被我片段的另一个实例覆盖。。