Android水平栏切换fragment

来源:互联网 发布:淘宝阿里旺旺打不开 编辑:程序博客网 时间:2024/05/17 03:12

主要涉及到fragment切换时的bug解决

xml

  • 水平栏
    <HorizontalScrollView           android:id="@+id/hsv_title"          android:layout_width="0dp"          android:layout_weight="1"          android:layout_height="fill_parent"          android:scrollbars="none"          android:fadingEdge="none"          android:overScrollMode="never">          <LinearLayout             android:id="@+id/ll_title"            android:layout_width="wrap_content"            android:layout_height="fill_parent"            android:orientation="horizontal"            ></LinearLayout>      </HorizontalScrollView>         <FrameLayout                    android:id="@+id/tabcontent"                    android:layout_width="match_parent"                    android:layout_height="0dp"                    android:layout_weight="1" />
  • ChildView——-info
<?xml version="1.0" encoding="UTF-8"?><LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"    android:id="@+id/ll_typeitem"    android:layout_width="wrap_content"    android:layout_height="wrap_content"    android:gravity="center"    android:background="@xml/bg_patient_title"    android:orientation="horizontal"     >    <TextView        android:id="@+id/tv_type"        android:layout_width="wrap_content"        android:layout_height="wrap_content"        android:textSize="16sp"        android:gravity="center"        android:ems="4"        android:textStyle="bold" /></LinearLayout>

java

        /*         * TODO 水平栏         */        mhorScroll = (LinearLayout) findViewById(R.id.ll_title);        mhorScroll.removeAllViews();        //titleList为自定义的字符串数组        for (int i = 0; i < titleList.length; i++) {            View scrollView = layoutInflater.inflate(                    R.layout.info, null);            LinearLayout ll_typeitem = (LinearLayout) scrollView                    .findViewById(R.id.ll_typeitem);            TextView tv_type = (TextView) scrollView.findViewById(R.id.tv_type);            tv_type.setText(titleList[i]);            if (i == currentTab) {                ll_typeitem.setClickable(false);                ll_typeitem.setSelected(true);                tv_type.setTextColor(this.getResources()                        .getColor(R.color.white));            } else {                ll_typeitem.setClickable(true);                ll_typeitem.setSelected(false);                tv_type.setTextColor(this.getResources().getColor(                        R.color.font_hint));            }            //利用常量设置监听器            final int num = i;            ll_typeitem.setOnClickListener(new OnClickListener() {                @Override                public void onClick(View arg0) {                    currentTab = num;                    changeTabView();                }            });            tabViewList.add(new TabView(tv_type, ll_typeitem));            mhorScroll.addView(scrollView);        }    /*    *TabView    */        public class TabView {        public TextView tv_type;        public LinearLayout ll_typeitem;        public TabView(TextView tv_type, LinearLayout ll_typeitem) {            this.tv_type = tv_type;            this.ll_typeitem = ll_typeitem;        }    }    /*    *  更换fragment    */    public void changeTabColor() {        for (int i = 0; i < tabViewList.size(); i++) {            if (currentTab == i) {                tabViewList.get(i).ll_typeitem.setSelected(true);                tabViewList.get(i).ll_typeitem.setClickable(false);                tabViewList.get(i).tv_type.setTextColor(this.getResources()                        .getColor(R.color.white));            } else {                tabViewList.get(i).ll_typeitem.setClickable(true);                tabViewList.get(i).ll_typeitem.setSelected(false);                tabViewList.get(i).tv_type.setTextColor(this.getResources()                        .getColor(R.color.font_hint));            }        }    }    public void changeTabView() {        android.support.v4.app.FragmentManager fm = getSupportFragmentManager();        android.support.v4.app.FragmentTransaction ft = fm.beginTransaction();        //在Manager中找到当前fragment        mFregmentSelected = (BaseFragment) fm.findFragmentByTag("Tab"                + currentTab);        if (mLastTabView != null) {        //隐藏上一个fragment            ft.hide(mLastTabView);        }        if (mFregmentSelected != null) {        //显示当前的fragment            ft.show(mFregmentSelected);        } else {            switch (currentTab) {            case 0:                mFregmentSelected = new PageFrag1(                        testActivity.this);                break;            case 1:                mFregmentSelected = new PageFrag2(                        testActivity.this);                break;            case 2:                mFregmentSelected = new PageFrag3(                        testActivity.this);                break;            case 3:                mFregmentSelected = new PageFrag4(                        testActivity.this);                break;            case 4:                mFregmentSelected = new PageFrag5_ris(                        testActivity.this);                break;            case 5:                mFregmentSelected = new PageFrag7(                        testActivity.this);                break;            case 6:                mFregmentSelected = new PageFrag8(                        testActivity.this);                break;            default:                break;            }            //替换布局中的framelayout,同时为fragment指定一个Tag            ft.add(R.id.tabcontent, mFregmentSelected, "Tab" + currentTab);        }        mLastTabView = mFregmentSelected;        //将fragment加入到退回栈,即按返回键返回上一个fragment        ft.addToBackStack(null);        //使用commit会报错"IllegalStateException: Can not perform this action after onSaveInstanceState"        ft.commitAllowingStateLoss();    }
0 0
原创粉丝点击