drawerNavigation被fragment overlay, FragmentTabHost使用

来源:互联网 发布:mt4 布林线源码 编辑:程序博客网 时间:2024/05/16 06:36

当遇到一个坑爹的设计师,,,,要求同时使用drawerNavigation和 Tabs时。。。。打开抽屉时,发现抽屉被被还有tabs的fragment overlay。。。。。


1 原因:

drawerNavigation 一般是overlay所有的界面,但是不能够overlay 含有tabs的fragment

2 解决办法:

2.1可以 隐藏掉所有的现在可见的fragment,效果差

2.2可以 改变导航模式 eg: actionBar.setNavigationMode(ActionBar.NAVIGATION_MODE_STANDARD); 效果也不好,但是比第一种效果强。

注: 有没有更好的办法?
2.3 使用FragmentTabHost, 即将给需要添加的tabs一个容器。
3 举例:
在Activity中使用FragmentTabHost
import com.example.android.supportv4.R;import android.os.Bundle;import android.support.v4.app.FragmentActivity;import android.support.v4.app.FragmentTabHost;/** * This demonstrates how you can implement switching between the tabs of a * TabHost through fragments, using FragmentTabHost. */public class FragmentTabs extends FragmentActivity {    private FragmentTabHost mTabHost;    @Override    protected void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(R.layout.fragment_tabs);        mTabHost = (FragmentTabHost)findViewById(android.R.id.tabhost);        mTabHost.setup(this, getSupportFragmentManager(), R.id.realtabcontent);        mTabHost.addTab(mTabHost.newTabSpec("simple").setIndicator("Simple"),                FragmentStackSupport.CountingFragment.class, null);        mTabHost.addTab(mTabHost.newTabSpec("contacts").setIndicator("Contacts"),                LoaderCursorSupport.CursorLoaderListFragment.class, null);        mTabHost.addTab(mTabHost.newTabSpec("custom").setIndicator("Custom"),                LoaderCustomSupport.AppListFragment.class, null);        mTabHost.addTab(mTabHost.newTabSpec("throttle").setIndicator("Throttle"),                LoaderThrottleSupport.ThrottledLoaderListFragment.class, null);    }}

在Fragment中使用FragmentTabHost
import com.example.android.supportv4.R;import android.os.Bundle;import android.support.v4.app.Fragment;import android.support.v4.app.FragmentTabHost;import android.view.LayoutInflater;import android.view.View;import android.view.ViewGroup;public class FragmentTabsFragmentSupport extends Fragment {    private FragmentTabHost mTabHost;    @Override    public View onCreateView(LayoutInflater inflater, ViewGroup container,            Bundle savedInstanceState) {        mTabHost = new FragmentTabHost(getActivity());        mTabHost.setup(getActivity(), getChildFragmentManager(), R.id.fragment1);        mTabHost.addTab(mTabHost.newTabSpec("simple").setIndicator("Simple"),                FragmentStackSupport.CountingFragment.class, null);        mTabHost.addTab(mTabHost.newTabSpec("contacts").setIndicator("Contacts"),                LoaderCursorSupport.CursorLoaderListFragment.class, null);        mTabHost.addTab(mTabHost.newTabSpec("custom").setIndicator("Custom"),                LoaderCustomSupport.AppListFragment.class, null);        mTabHost.addTab(mTabHost.newTabSpec("throttle").setIndicator("Throttle"),                LoaderThrottleSupport.ThrottledLoaderListFragment.class, null);        return mTabHost;    }    @Override    public void onDestroyView() {        super.onDestroyView();        ((ViewGroup) mTabHost.getParent()).removeView(mTabHost);    }}

一定要在onDestoryView()方法中将mTabHost,所在的这个fragment去除掉,否则会出现下面所在的错误


0 0
原创粉丝点击