保存选项卡的最后状态

Posted

技术标签:

【中文标题】保存选项卡的最后状态【英文标题】:Save last state of the tabs 【发布时间】:2013-12-11 13:46:58 【问题描述】:

我正在使用 FragmentTabHost 和 TabWidget 创建 4 个选项卡。选择某些选项卡时,它会从其相关类打开其相关的XML文件。假设我选择了选项卡 1。它在 web 视图中打开了一个网站。然后我移动到下一个选项卡,即选项卡 2。当我回到选项卡 1 时,它会重新绘制 web 视图并再次请求该网站。它没有用,因为和以前一样需要相同的页面。我的意思是不保留选项卡的最后状态。它从头开始打开。无论我离开标签 1,如何获取网页的最后内容?代码如下:

setContentView(R.layout.bottom_tabs);

    mTabHost = (FragmentTabHost) findViewById(android.R.id.tabhost);
    mTabHost.setup(this, getSupportFragmentManager(), R.id.realtabcontent);

    Bundle b = new Bundle();
    b.putString("key", "Home");
    mTabHost.addTab(mTabHost.newTabSpec("home").setIndicator("Home"),
            Home.class, b);
    //
    b = new Bundle();
    b.putString("key", "Menu");
    mTabHost.addTab(mTabHost.newTabSpec("menu").setIndicator("Menu"),
            MenuDemo.class, b);


    b = new Bundle();
    b.putString("key", "Promos");
    mTabHost.addTab(mTabHost.newTabSpec("promos").setIndicator("Promos"),
            Promos.class, b);

    b = new Bundle();
    b.putString("key", "Promos");
    mTabHost.addTab(mTabHost.newTabSpec("location").setIndicator("Location"),
            Location.class, b);

Tab 1 打开此活动:

public class Home extends Fragment

public Home() 
    // TODO Auto-generated constructor stub



@Override
public void onCreate(Bundle savedInstanceState) 
    // TODO Auto-generated method stub
    super.onCreate(savedInstanceState);


@SuppressLint("SetjavascriptEnabled")
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
        Bundle savedInstanceState) 
    // TODO Auto-generated method stub
    View v = LayoutInflater.from(getActivity()).inflate(R.layout.home,
            null);
    WebView webView = (WebView) v.findViewById(R.id.webViewHome);
    webView.setWebViewClient(new MyWebViewClient());
    webView.getSettings().setJavaScriptEnabled(true);
    webView.loadUrl("http://www.google.com");

    return v;

private class MyWebViewClient extends WebViewClient 
    @Override
    public boolean shouldOverrideUrlLoading(WebView view, String url) 
        view.loadUrl(url);
        return true;
    


@Override
public void onActivityCreated(Bundle savedInstanceState) 
    // TODO Auto-generated method stub
    super.onActivityCreated(savedInstanceState);

//

【问题讨论】:

请参考this question。我认为这可能会有所帮助。 你应该在标签点击时隐藏片段,当你回到那个标签时再次显示它。 【参考方案1】:

在您的 mainTab Activity 中,您应该执行以下操作来隐藏片段并检查它是否已经加载,只需显示它:

public void onTabChanged(String tag) 
        TabInfo newTab = this.mapTabInfo.get(tag);
        if (mLastTab != newTab) 
            FragmentTransaction ft = this.getSupportFragmentManager()
                    .beginTransaction();
            if (mLastTab != null) 
                if (mLastTab.fragment != null) 
                    // ft.detach(mLastTab.fragment);
                    ft.hide(mLastTab.fragment);
                
            
            if (newTab != null) 
                if (newTab.fragment == null) 
                    newTab.fragment = Fragment.instantiate(this,
                            newTab.clss.getName(), newTab.args);
                    ft.add(R.id.realtabcontent, newTab.fragment, newTab.tag);
                 else 

                    // ft.attach(newTab.fragment);
                    ft.show(newTab.fragment);

                
            

            mLastTab = newTab;
            ft.commit();
            this.getSupportFragmentManager().executePendingTransactions();

        
    

并将标签的标签发送给它。

希望对你有帮助:)

【讨论】:

以上是关于保存选项卡的最后状态的主要内容,如果未能解决你的问题,请参考以下文章

保存片段状态操作栏选项卡

需要使用 mvc5 控制器在一个状态时间激活一个选项卡的 jQuery 选项卡限制

引导导航选项卡的字体颜色在活动状态下没有变化

切换选项卡的按钮跳过第一个选项卡

以角度切换选项卡时保持选项卡状态

JSF:Bean 属性不断恢复到最后一个选项卡值