Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/windows/15.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
Android操作栏选项卡:屏幕旋转_Android_Actionbarsherlock_Android Tabs - Fatal编程技术网

Android操作栏选项卡:屏幕旋转

Android操作栏选项卡:屏幕旋转,android,actionbarsherlock,android-tabs,Android,Actionbarsherlock,Android Tabs,嗨,我在使用ABS的操作栏和选项卡时遇到问题。我有两个选项卡,第一个“收藏夹”,只是扩展了片段,没有显示任何内容。第二个“行”扩展了SherlockListFragment,并实现了LoaderManager.LoaderCallbacks(从数据库加载用户列表) 该应用程序工作正常(或者至少,我认为是这样),但当我旋转屏幕时,问题就出现了。如果我在纵向模式下选择了LinesTab(显示列表),然后更改为横向,则FavoriteStab的内容(最初为空)将填充LinesTab的内容 这是代码的重

嗨,我在使用ABS的操作栏和选项卡时遇到问题。我有两个选项卡,第一个“收藏夹”,只是扩展了
片段
,没有显示任何内容。第二个“行”扩展了
SherlockListFragment
,并实现了
LoaderManager.LoaderCallbacks
(从数据库加载用户列表)

该应用程序工作正常(或者至少,我认为是这样),但当我旋转屏幕时,问题就出现了。如果我在纵向模式下选择了LinesTab(显示列表),然后更改为横向,则FavoriteStab的内容(最初为空)将填充LinesTab的内容

这是代码的重要部分

Main.java
(创建两个选项卡)

LinesTab.java
(使用LoaderManager从数据库加载用户的选项卡)

此外,我不确定是否所有代码都以正确的方式实现。特别是
方法。在本文中,他们实现了一个监听器来管理所有的片段,但我在每个片段中都实现了一个监听器。因此,我不知道
ft.add
ft.attach
是否是实现该方法的最佳方法


谢谢。

我终于找到了解决办法。我在
Main.java
中实现了一个通用的
TabListener
,并在每次旋转屏幕时保存当前选项卡索引:

Main.java

public class Main extends SherlockFragmentActivity {
int pos = 0;

@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    ActionBar actionBar = getSupportActionBar();
    actionBar.setNavigationMode(ActionBar.NAVIGATION_MODE_TABS);
    actionBar.setDisplayShowTitleEnabled(true);

    if (savedInstanceState != null) {
        // Restore the last tab position
        pos = savedInstanceState.getInt("pos");
    }

    Tab tab = actionBar
            .newTab()
            .setText("Favourites")
            .setTabListener(new TabListener<FavouritesTab>(this, "Favourites", FavouritesTab.class));
            //.setTabListener(new FavouritesTab());
    actionBar.addTab(tab);

    tab = actionBar
            .newTab()
            .setText("Lines")
            .setTabListener(new TabListener<LinesTab>(this, "LinesTab", LinesTab.class));
            //.setTabListener(new LinesTab());
    actionBar.addTab(tab);

    // Set the last tab position, or zero by default
    getSupportActionBar().setSelectedNavigationItem(pos);
}

@Override
protected void onSaveInstanceState(Bundle outState) {
    // Save the current tab position
    super.onSaveInstanceState(outState);
    outState.putInt("pos", getSupportActionBar().getSelectedNavigationIndex());
}

// The TabListener
static class TabListener<T extends Fragment> implements ActionBar.TabListener {
    private Fragment mFragment;
    private SherlockFragmentActivity mActivity;
    private String mTag;
    private Class<T> mClass;

    public TabListener(SherlockFragmentActivity activity, String tag, Class<T> clz) {
        mActivity = activity;
        mTag = tag;
        mClass = clz;
    }

    public void onTabSelected(Tab tab, FragmentTransaction ft) {
        // Check if the fragment is already initialized
        if (mFragment == null) {
            // If not, instantiate and add it to the activity
            mFragment = Fragment.instantiate(mActivity, mClass.getName());
            ft.add(android.R.id.content, mFragment, mTag);
        } else {
            // If it exists, simply attach it on order to show it
            ft.attach(mFragment);
        }
    }

    public void onTabUnselected(Tab tab, FragmentTransaction ft) {
        if (mFragment != null) {
            ft.detach(mFragment);
        }
    }

    public void onTabReselected(Tab tab, FragmentTransaction ft) {}
}
}
public类主扩展SherlockFragmentActivity{
int pos=0;
@凌驾
创建时的公共void(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
ActionBar ActionBar=getSupportActionBar();
actionBar.setNavigationMode(actionBar.NAVIGATION\u MODE\u选项卡);
actionBar.setDisplayShowTitleEnabled(true);
如果(savedInstanceState!=null){
//恢复最后一个制表符位置
pos=savedInstanceState.getInt(“pos”);
}
选项卡=操作栏
.newTab()
.setText(“收藏夹”)
.setTabListener(新的TabListener(这是“收藏夹”,FavoriteStab.class));
//.setTableListener(新收藏夹选项卡());
actionBar.addTab(tab);
选项卡=操作栏
.newTab()
.setText(“行”)
.setTabListener(新的TabListener(这个“LinesTab”,LinesTab.class));
//.setTableListener(新的LinesTab());
actionBar.addTab(tab);
//设置最后一个制表符位置,或默认设置为零
getSupportActionBar().setSelectedNavigationItem(pos);
}
@凌驾
SaveInstanceState上受保护的无效(束超出状态){
//保存当前选项卡位置
super.onSaveInstanceState(超出状态);
outState.putInt(“pos”,getSupportActionBar().getSelectedNavigationIndex());
}
//报业者
静态类TabListener实现ActionBar.TabListener{
私人碎片;
私家侦探破片活动;
私有字符串mTag;
私有类mClass;
公共TabListener(SherlockFragmentActivity活动,字符串标记,类clz){
活动性=活动性;
mTag=标签;
mClass=clz;
}
已选择的公共事务(选项卡,碎片事务ft){
//检查片段是否已初始化
if(mFragment==null){
//如果不是,则实例化并将其添加到活动中
MFFragment=Fragment.instantiate(mActivity,mClass.getName());
ft.add(android.R.id.content、mFragment、mTag);
}否则{
//如果存在,只需将其贴在屏幕上即可显示
ft.attach(mFragment);
}
}
已选择公共空页(选项卡,碎片事务ft){
if(mFragment!=null){
ft.分离(mFragment);
}
}
已重新选择公共void ontaber(选项卡,碎片事务ft){}
}
}
我已经删除了
LinesTab.java
favoritestab.java

public class Main extends SherlockFragmentActivity {
int pos = 0;

@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    ActionBar actionBar = getSupportActionBar();
    actionBar.setNavigationMode(ActionBar.NAVIGATION_MODE_TABS);
    actionBar.setDisplayShowTitleEnabled(true);

    if (savedInstanceState != null) {
        // Restore the last tab position
        pos = savedInstanceState.getInt("pos");
    }

    Tab tab = actionBar
            .newTab()
            .setText("Favourites")
            .setTabListener(new TabListener<FavouritesTab>(this, "Favourites", FavouritesTab.class));
            //.setTabListener(new FavouritesTab());
    actionBar.addTab(tab);

    tab = actionBar
            .newTab()
            .setText("Lines")
            .setTabListener(new TabListener<LinesTab>(this, "LinesTab", LinesTab.class));
            //.setTabListener(new LinesTab());
    actionBar.addTab(tab);

    // Set the last tab position, or zero by default
    getSupportActionBar().setSelectedNavigationItem(pos);
}

@Override
protected void onSaveInstanceState(Bundle outState) {
    // Save the current tab position
    super.onSaveInstanceState(outState);
    outState.putInt("pos", getSupportActionBar().getSelectedNavigationIndex());
}

// The TabListener
static class TabListener<T extends Fragment> implements ActionBar.TabListener {
    private Fragment mFragment;
    private SherlockFragmentActivity mActivity;
    private String mTag;
    private Class<T> mClass;

    public TabListener(SherlockFragmentActivity activity, String tag, Class<T> clz) {
        mActivity = activity;
        mTag = tag;
        mClass = clz;
    }

    public void onTabSelected(Tab tab, FragmentTransaction ft) {
        // Check if the fragment is already initialized
        if (mFragment == null) {
            // If not, instantiate and add it to the activity
            mFragment = Fragment.instantiate(mActivity, mClass.getName());
            ft.add(android.R.id.content, mFragment, mTag);
        } else {
            // If it exists, simply attach it on order to show it
            ft.attach(mFragment);
        }
    }

    public void onTabUnselected(Tab tab, FragmentTransaction ft) {
        if (mFragment != null) {
            ft.detach(mFragment);
        }
    }

    public void onTabReselected(Tab tab, FragmentTransaction ft) {}
}
}
public class FavouritesTab extends Fragment implements ActionBar.TabListener {
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
}

@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle state) {
    return super.onCreateView(inflater, container, state);
}

// TabListener callbacks
public void onTabSelected(ActionBar.Tab tab, FragmentTransaction ft) {
    ft.add(android.R.id.content, this, "LinesTabTag");
    ft.attach(this);
}

public void onTabUnselected(ActionBar.Tab tab, FragmentTransaction ft) {
    ft.detach(this);
}

public void onTabReselected(ActionBar.Tab tab, FragmentTransaction ft) {}
}
public class Main extends SherlockFragmentActivity {
int pos = 0;

@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    ActionBar actionBar = getSupportActionBar();
    actionBar.setNavigationMode(ActionBar.NAVIGATION_MODE_TABS);
    actionBar.setDisplayShowTitleEnabled(true);

    if (savedInstanceState != null) {
        // Restore the last tab position
        pos = savedInstanceState.getInt("pos");
    }

    Tab tab = actionBar
            .newTab()
            .setText("Favourites")
            .setTabListener(new TabListener<FavouritesTab>(this, "Favourites", FavouritesTab.class));
            //.setTabListener(new FavouritesTab());
    actionBar.addTab(tab);

    tab = actionBar
            .newTab()
            .setText("Lines")
            .setTabListener(new TabListener<LinesTab>(this, "LinesTab", LinesTab.class));
            //.setTabListener(new LinesTab());
    actionBar.addTab(tab);

    // Set the last tab position, or zero by default
    getSupportActionBar().setSelectedNavigationItem(pos);
}

@Override
protected void onSaveInstanceState(Bundle outState) {
    // Save the current tab position
    super.onSaveInstanceState(outState);
    outState.putInt("pos", getSupportActionBar().getSelectedNavigationIndex());
}

// The TabListener
static class TabListener<T extends Fragment> implements ActionBar.TabListener {
    private Fragment mFragment;
    private SherlockFragmentActivity mActivity;
    private String mTag;
    private Class<T> mClass;

    public TabListener(SherlockFragmentActivity activity, String tag, Class<T> clz) {
        mActivity = activity;
        mTag = tag;
        mClass = clz;
    }

    public void onTabSelected(Tab tab, FragmentTransaction ft) {
        // Check if the fragment is already initialized
        if (mFragment == null) {
            // If not, instantiate and add it to the activity
            mFragment = Fragment.instantiate(mActivity, mClass.getName());
            ft.add(android.R.id.content, mFragment, mTag);
        } else {
            // If it exists, simply attach it on order to show it
            ft.attach(mFragment);
        }
    }

    public void onTabUnselected(Tab tab, FragmentTransaction ft) {
        if (mFragment != null) {
            ft.detach(mFragment);
        }
    }

    public void onTabReselected(Tab tab, FragmentTransaction ft) {}
}
}