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加载保存的值,但它们被我片段的另一个实例覆盖。。