使用FragmentTabhost代替Tabhost onCreatView 每次都被调用
来源:互联网 发布:淘宝客白菜群软件 编辑:程序博客网 时间:2024/05/17 09:12
普通的FragmentTabhost 的使用, 但这种用法, 每次当切换到Fragment的时候,都会重新调用onCreatView, 有的时候是不需要的, 请看下面的方法,就不会每次被调用。
先来 Layout:
<?xml version="1.0" encoding="utf-8"?><LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical"> <FrameLayout android:id="@+id/main_aty_fragmentactivity" android:layout_width="match_parent" android:layout_height="0dip" android:layout_weight="1" /> <View android:layout_width="match_parent" android:layout_height="0.5dp" android:background="@color/view_color" /> <RelativeLayout android:layout_width="match_parent" android:layout_height="55dp"> <RadioGroup android:id="@+id/main_aty_tab_rg_menu" android:layout_width="match_parent" android:layout_height="match_parent" android:background="@color/white" android:orientation="horizontal" android:paddingTop="5dp"> <RadioButton android:id="@+id/tab_rb_index" style="@style/tab_rb_style" android:checked="true" android:drawableTop="@drawable/main_aty_index_ico" android:text="首页" /> <RadioButton android:id="@+id/tab_rb_active" style="@style/tab_rb_style" android:drawableTop="@drawable/main_aty_active_ico" android:text="活动" /> <RadioButton android:id="@+id/tab_rb_order" style="@style/tab_rb_style" android:drawableTop="@drawable/main_aty_order_ico" android:text="我的" /> </RadioGroup> </RelativeLayout> <!--<android.support.v4.app.FragmentTabHost--> <!--android:id="@+id/main_aty_tabHost"--> <!--android:layout_width="fill_parent"--> <!--android:layout_height="50dp"--> <!--android:visibility="gone" >--> <!--<FrameLayout--> <!--android:id="@+id/tabcontent"--> <!--android:layout_width="0dp"--> <!--android:layout_height="0dp"--> <!--android:layout_weight="0" />--> <!--</android.support.v4.app.FragmentTabHost>--></LinearLayout>
再看 TabActivity 中的
private void initViewHost() { layoutInflater = LayoutInflater.from(this); mTabRg = (RadioGroup) findViewById(R.id.main_aty_tab_rg_menu); fragmentArray.add(new FragmentIndex()); fragmentArray.add(new FragmentActive()); fragmentArray.add(new FragmentCenter()); FragmentTabAdapter tabAdapter = new FragmentTabAdapter(this, fragmentArray, R.id.main_aty_fragmentactivity, mTabRg); tabAdapter.setOnRgsExtraCheckedChangedListener(new FragmentTabAdapter.OnRgsExtraCheckedChangedListener() { @Override public void OnRgsExtraCheckedChanged(RadioGroup radioGroup, int checkedId, int index) { //todo } }); message_red_tips = (ImageView) findViewById(R.id.message_red_tips); }
最关键的部分是这里 FragmentTabAdapter, 附上代码:
package com.hanzi.chinaexpress.view;import android.support.v4.app.Fragment;import android.support.v4.app.FragmentActivity;import android.support.v4.app.FragmentTransaction;import android.widget.RadioGroup;import java.util.List;public class FragmentTabAdapter implements RadioGroup.OnCheckedChangeListener { private List<Fragment> fragments; // 一个tab页面对应一个Fragment private RadioGroup rgs; // 用于切换tab private FragmentActivity fragmentActivity; // Fragment所属的Activity private int fragmentContentId; // Activity中所要被替换的区域的id private int currentTab; // 当前Tab页面索引 private OnRgsExtraCheckedChangedListener onRgsExtraCheckedChangedListener; // 用于让调用者在切换tab时候增加新的功能 public FragmentTabAdapter(FragmentActivity fragmentActivity, List<Fragment> fragments, int fragmentContentId, RadioGroup rgs) { this.fragments = fragments; this.rgs = rgs; this.fragmentActivity = fragmentActivity; this.fragmentContentId = fragmentContentId; // 默认显示第一页 FragmentTransaction ft = fragmentActivity.getSupportFragmentManager().beginTransaction(); ft.add(fragmentContentId, fragments.get(0)); ft.commit(); rgs.setOnCheckedChangeListener(this); } @Override public void onCheckedChanged(RadioGroup radioGroup, int checkedId) { for (int i = 0; i < rgs.getChildCount(); i++) { if (rgs.getChildAt(i).getId() == checkedId) { Fragment fragment = fragments.get(i); FragmentTransaction ft = obtainFragmentTransaction(i); getCurrentFragment().onPause(); // 暂停当前tab// getCurrentFragment().onStop(); // 暂停当前tab if (fragment.isAdded()) {// fragment.onStart(); // 启动目标tab的onStart() fragment.onResume(); // 启动目标tab的onResume() } else { ft.add(fragmentContentId, fragment); } showTab(i); // 显示目标tab ft.commit(); // 如果设置了切换tab额外功能功能接口 if (null != onRgsExtraCheckedChangedListener) { onRgsExtraCheckedChangedListener.OnRgsExtraCheckedChanged(radioGroup, checkedId, i); } } } } /** * 切换tab * * @param idx */ private void showTab(int idx) { for (int i = 0; i < fragments.size(); i++) { Fragment fragment = fragments.get(i); FragmentTransaction ft = obtainFragmentTransaction(idx); if (idx == i) { ft.show(fragment); } else { ft.hide(fragment); } ft.commit(); } currentTab = idx; // 更新目标tab为当前tab } /** * 获取一个带动画的FragmentTransaction * * @param index * @return */ private FragmentTransaction obtainFragmentTransaction(int index) { FragmentTransaction ft = fragmentActivity.getSupportFragmentManager().beginTransaction(); // 设置切换动画// if (index > currentTab) {// ft.setCustomAnimations(R.anim.slide_left_in, R.anim.slide_left_out);// } else {// ft.setCustomAnimations(R.anim.slide_right_in, R.anim.slide_right_out);// } return ft; } public int getCurrentTab() { return currentTab; } public Fragment getCurrentFragment() { return fragments.get(currentTab); } public OnRgsExtraCheckedChangedListener getOnRgsExtraCheckedChangedListener() { return onRgsExtraCheckedChangedListener; } public void setOnRgsExtraCheckedChangedListener(OnRgsExtraCheckedChangedListener onRgsExtraCheckedChangedListener) { this.onRgsExtraCheckedChangedListener = onRgsExtraCheckedChangedListener; } /** * 切换tab额外功能功能接口 */ static class OnRgsExtraCheckedChangedListener { public void OnRgsExtraCheckedChanged(RadioGroup radioGroup, int checkedId, int index) { } }}
另外附上普通的 FragmentTabhost的使用:
这里写链接内容
0 0
- 使用FragmentTabhost代替Tabhost onCreatView 每次都被调用
- 使用FragmentTabhost代替Tabhost
- 使用FragmentTabhost代替Tabhost
- (转)使用FragmentTabhost代替Tabhost
- Fragment进阶2——使用FragmentTabhost代替Tabhost
- 当FragmentTabHost切换Fragment时,重复调用Fragment的onCreatView方法的解决办法
- TabHost 和 FragmentTabHost面面观
- TabHost 和 FragmentTabHost
- TabHost 和 FragmentTabHost
- TabHost 和 FragmentTabHost
- TabHost 和 FragmentTabHost
- jquery插件DataTable,每次调用都访问
- Fragment中的onCreatView()没有立即调用
- 【FragmentTabHost】FragmentTabHost的使用
- 避免每次检索都使用DirectoryReader.open()
- radiogroup_switch_fragment代替tabhost 效果
- FragmentTabHost 使用;
- FragmentTabHost使用
- java 构造方法
- 天声人語 20150903
- 日经春秋 20150903
- SLURM 节点状态总是drained问题
- Regionals 2014 >> Latin America 6822 - Black a
- 使用FragmentTabhost代替Tabhost onCreatView 每次都被调用
- [水题]杭电1004
- 【HDU2444】【匈牙利算法】【二分匹配】【求最大匹配】【染色】
- GUI
- 使用@Controller注解为什么要配置<mvc:annotation-driven />
- dhcpd .conf的配置
- Fragment(碎片)-------让界面在平板上一样炫丽美观
- CC2541 OAD无线升级遇到问题总结
- 1058 部分和问题【dfs+记录】