我正在使用Android 4.0 ICS和片段开发应用程序.
考虑ICS 4.0.3(API级别15)API的演示示例应用程序中的此修改示例:
public class FragmentTabs extends Activity {
private static final String TAG = FragmentTabs.class.getSimpleName();
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
final ActionBar bar = getActionBar();
bar.setNavigationMode(ActionBar.NAVIGATION_MODE_TABS);
bar.setDisplayOptions(0, ActionBar.DISPLAY_SHOW_TITLE);
bar.addTab(bar.newTab()
.setText("Simple")
.setTabListener(new TabListener<SimpleFragment>(
this, "mysimple", SimpleFragment.class)));
if (savedInstanceState != null) {
bar.setSelectedNavigationItem(savedInstanceState.getInt("tab", 0));
Log.d(TAG, "FragmentTabs.onCreate tab: " + savedInstanceState.getInt("tab"));
Log.d(TAG, "FragmentTabs.onCreate number: " + savedInstanceState.getInt("number"));
}
}
@Override
protected void onSaveInstanceState(Bundle outState) {
super.onSaveInstanceState(outState);
outState.putInt("tab", getActionBar().getSelectedNavigationIndex());
}
public static class TabListener<T extends Fragment> implements ActionBar.TabListener { …Run Code Online (Sandbox Code Playgroud) 我将我的应用程序的一部分从活动切换到碎片,以便我可以使用整洁的ActionBar选项卡.
但是,在完成转换后,我遇到了一个问题:每当我切换到另一个选项卡时,Fragment都会重新创建.每次进入选项卡时都会调用onCreate和onCreateView.
我有4个选项卡,每个选项卡都打开这些片段之一:
Fragment ShopFragment = new WebActivity();
Fragment SearchFragment = new SearchActivity(context);
Fragment StoreFragment = new StoreLocatorActivity(context, this);
Fragment BlogsFragment = new BlogsActivity(context, this);
Run Code Online (Sandbox Code Playgroud)
这是我的监听器代码:
class MyTabsListener implements ActionBar.TabListener {
public Fragment fragment;
public MyTabsListener(Fragment fragment) {
this.fragment = fragment;
}
@Override
public void onTabReselected(Tab tab, FragmentTransaction ft) {
ft.hide(fragment);
}
@Override
public void onTabSelected(Tab tab, FragmentTransaction ft) {
ft.replace(R.id.fragment_container, fragment);
}
@Override
public void onTabUnselected(Tab tab, FragmentTransaction ft) {
}
}
Run Code Online (Sandbox Code Playgroud)
有人可以指点我正确的方向吗?
android android-fragments android-activity android-actionbar
我已经在这里问过这个问题不止一次,但我无法弄明白如何解决我的问题.
我有一个用户执行此操作的应用:
1 - 打开navigationDrawer并选择一个选项(创建一个片段)(我在这里选择第二个选项);
public void selectItem(int position) {
Fragment fragment = null;
switch (position) {
case FRAGMENT_OPTION1:
...
break;
case FRAGMENT_OPTION2:
fragment = ControlPanelFragment.newInstance();
break;
...
case FRAGMENT_OPTIONN:
...
return;
default:
break;
}
if (fragment != null) {
FragmentManager fragmentManager = getSupportFragmentManager();
fragmentManager.beginTransaction().replace(R.id.fragment_container, fragment).commitAllowingStateLoss();
}
}
Run Code Online (Sandbox Code Playgroud)
2 - 加载所选选项(ControlPanelFragment):2.1 - 控制面板包含选项卡和iconpager.对于每个寻呼机页面和每个选项卡,都会创建一个新的片段.我有3个标签和3个页面,因此创建了9个片段;
@Override
public void onViewCreated(View view, @Nullable Bundle savedInstanceState) {
super.onViewCreated(view, savedInstanceState);
if (savedInstanceState != null) {
currentControlPanelOption = savedInstanceState.getInt("currentControlPanelOption", currentControlPanelOption);
currentControlPanelTab = savedInstanceState.getInt("currentControlPanelTab", currentControlPanelTab);
}
setControlPanelTabs();
setIconPager(); …Run Code Online (Sandbox Code Playgroud)