FragmentTabHost切换Fragment时避免UI重新加载

用FragmentTabHost + Fragment 可以实现微博底栏菜单,看图: 
 
不过,初次实现时发现有个缺陷,每次FragmentTabHost切换fragment时会调用onCreateView()重绘UI。 
解决方法,在fragment onCreateView 里缓存View: 
private View rootView;// 缓存Fragment view

  @Override
  public View onCreateView(LayoutInflater inflater, ViewGroup container,
      Bundle savedInstanceState)
  {
    Log.i(TAG, "onCreateView");

    if (rootView == null)
    {
      rootView = inflater.inflate(R.layout.fragment_1, null);
    }
    // 缓存的rootView需要判断是否已经被加过parent,如果有parent需要从parent删除,要不然会发生这个rootview已经有parent的错误。
    ViewGroup parent = (ViewGroup) rootView.getParent();
    if (parent != null)
    {
      parent.removeView(rootView);
    }
    return rootView;
  }
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
FragmentTabHostFragmentActivity可以帮助我们快速实现应用主界面的Tab切换功能,具体实现步骤如下: 1. 在xml布局文件中定义FragmentTabHostTabWidget ```xml <android.support.v4.app.FragmentTabHost android:id="@+id/tab_host" android:layout_width="match_parent" android:layout_height="match_parent"> <TabWidget android:id="@android:id/tabs" android:layout_width="match_parent" android:layout_height="wrap_content"/> </android.support.v4.app.FragmentTabHost> ``` 2. 在FragmentActivity中初始化FragmentTabHost并添加TabSpec ```java public class MainActivity extends FragmentActivity { private FragmentTabHost mTabHost; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); mTabHost = (FragmentTabHost) findViewById(R.id.tab_host); mTabHost.setup(this, getSupportFragmentManager(), R.id.tab_content); // 添加TabSpec mTabHost.addTab(mTabHost.newTabSpec("tab1").setIndicator("Tab1"), Fragment1.class, null); mTabHost.addTab(mTabHost.newTabSpec("tab2").setIndicator("Tab2"), Fragment2.class, null); mTabHost.addTab(mTabHost.newTabSpec("tab3").setIndicator("Tab3"), Fragment3.class, null); } } ``` 3. 创建需要显示的Fragment,并在TabSpec中添加对应的Fragment ```java public class Fragment1 extends Fragment { @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { View view = inflater.inflate(R.layout.fragment1, container, false); return view; } } ``` 4. 在xml布局文件中定义需要显示的Fragment布局 ```xml <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:id="@+id/fragment1" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical"> <TextView android:id="@+id/text_view1" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="This is Fragment1"/> </LinearLayout> ``` 通过以上步骤,我们就可以在应用主界面实现Tab切换功能了。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值