fragment切换 常用写法

layout

    <FrameLayout
        android:id="@+id/main_container"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:layout_above="@+id/view_line"/>

Activity

onCreate方法
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        tvMain = (TextView) findViewById(R.id.tv_main);
        tvMain.setSelected(true);//首页默认选中
        tvDynamic = (TextView) findViewById(R.id.tv_dynamic);

        //默认加载首页
        homeFragment = new HomeFragment();
        getSupportFragmentManager().beginTransaction().add(R.id.main_container,homeFragment).commit();

        tvMain.setOnClickListener(tabClickListener);
        tvDynamic.setOnClickListener(tabClickListener);
    }

    private View.OnClickListener tabClickListener = new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            if (v.getId() != currentId) {//如果当前选中跟上次选中的一样,不需要处理
                changeSelect(v.getId());//改变图标跟文字颜色的选中 
                changeFragment(v.getId());//fragment的切换
                currentId = v.getId();//设置选中id
            }
        }
    };
改变fragment的显示
private void changeFragment(int resId) {
        FragmentTransaction transaction = getSupportFragmentManager().beginTransaction();//开启一个Fragment事务

        hideFragments(transaction);//隐藏所有fragment
    
        if(resId==R.id.tv_main){//主页
            if(homeFragment==null){//如果为空先添加进来.不为空直接显示
                homeFragment = new HomeFragment();
                transaction.add(R.id.main_container,homeFragment);
            }else {
                transaction.show(homeFragment);//显示首页的Fragment
            }
        }else if(resId==R.id.tv_dynamic){//动态
            if(dynamicFragment==null){
                dynamicFragment = new DynamicFragment();
                transaction.add(R.id.main_container,dynamicFragment);
            }else {
                transaction.show(dynamicFragment);
            }
        }
        transaction.commit();//一定要记得提交事务
    }
}
隐藏所有fragment
private void hideFragments(FragmentTransaction transaction){
    if (homeFragment != null)//不为空才隐藏,如果不判断第一次会有空指针异常
        transaction.hide(homeFragment);
    if (dynamicFragment != null)
        transaction.hide(dynamicFragment);
}
改变TextView选中颜色
private void changeSelect(int resId){
		tvMain.setSelected(false);
		tvDynamic.setSelected(false);
    
		switch (resId) {
		case R.id.tv_main:
			tvMain.setSelected(true);
			break;
		case R.id.tv_dynamic:
			tvDynamic.setSelected(true);
			break;
		}
	}
选中和未选中效果
<TextView
          android:id="@+id/tv_main"
          // 图片选择器
          android:drawableTop="@drawable/tab_item_main_img_selector"
          // 图片和文字的间距
          android:drawablePadding="@dimen/main_tab_item_image_and_text"
          // 是否可以为焦点
          android:focusable="true"
          // 文字颜色选择器
          android:textColor="@drawable/tabitem_txt_sel" />
tab_item_main_img_selector 图片选择器
<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
    <!-- 选中状态显示 -->
    <item android:drawable="@drawable/icon_tab_main_select" android:state_selected="true"/>

    <!--非选中状态显示-->
    <item android:drawable="@drawable/icon_tab_main_normal"/>
</selector>
tabitem_txt_sel 文字颜色选择器
<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
    <!-- 选中状态 -->
    <item android:color="@color/main_tab_item_text_select" android:state_selected="true"/>
    <!--非选中状态-->
    <item android:color="@color/main_tab_item_text_normal"/>
</selector>
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值