fragment的开发记录

<span style="font-family: Arial, Helvetica, sans-serif; background-color: rgb(255, 255, 255);">最新由于开发过程中,产品不断的提出新的界面改动,导致安卓开发的代码一直改动。不说多的上图。</span>



这个做成两个fragment,用fragmentmanager开启事物,进行

FragmentTransaction transaction=getSupportFragmentManager().beginTransaction();
transaction.replace(R.id.framelayout,fragment1);
transaction.commit;

这种做法就是第一幅图片也做成fragment,用fragmentManager进行切换,但是这个界面做成fragment之后,第一个界面是刷卡的界面,需要加载后台的service初始化,还有需要绑定service,需要在activity里面写一个onnewintent方法用于nfc后台的service读取数据,fragment里面无法写这些方法,还有service需要在activity销毁的时候解除绑定,这就是说第一个界面需要在activity里面写入,于是乎将第二图做成fragment,点击上面的有卡认证和无卡认证进行颜色修改,和fragment的现实和隐藏

case R.id.ll_card:
                tv_card.setTextColor(Color.parseColor("#0174e1"));
                view_card.setVisibility(View.VISIBLE);
                tv_nocard.setTextColor(Color.parseColor("#000000"));
                view_nocard.setVisibility(View.GONE);
                transaction=getSupportFragmentManager().beginTransaction();
                transaction.hide(nocardFragment);
                transaction.commit();
                break;
            case R.id.ll_nocard:
                transaction=getSupportFragmentManager().beginTransaction();
                tv_nocard.setTextColor(Color.parseColor("#0174e1"));
                view_nocard.setVisibility(View.VISIBLE);
                tv_card.setTextColor(Color.parseColor("#000000"));
                view_card.setVisibility(View.GONE);
                if(nocardFragment.isHidden()){
                    transaction.show(nocardFragment);
                }
                transaction.replace(R.id.frame_auth,nocardFragment);
                transaction.commit();
                break;

这里view_nocard和view_card是那块3dp高的绿色部分,这里第一次加载fragment需要在用

case R.id.ll_card:
    tv_card.setTextColor(Color.parseColor("#0174e1"));
    view_card.setVisibility(View.VISIBLE);
    tv_nocard.setTextColor(Color.parseColor("#000000"));
    view_nocard.setVisibility(View.GONE);
    transaction=getSupportFragmentManager().beginTransaction();
    transaction.hide(nocardFragment);
    transaction.commit();
    break;
case R.id.ll_nocard:
    transaction=getSupportFragmentManager().beginTransaction();
    tv_nocard.setTextColor(Color.parseColor("#0174e1"));
    view_nocard.setVisibility(View.VISIBLE);
    tv_card.setTextColor(Color.parseColor("#000000"));
    view_card.setVisibility(View.GONE);
    if(nocardFragment.isHidden()){
        transaction.show(nocardFragment);
    }
    transaction.replace(R.id.frame_auth,nocardFragment);
    transaction.commit();
    break;
这里view_nocard和view_card是那块3dp高的绿色部分,这里第一次加载fragment需要在用

  transaction.replace(R.id.frame_auth,nocardFragment);
加载这个fragment覆盖帧布局下面的,然后点击有卡认证需要隐藏该fragment,当再次点击显示该fragment,不能继续用replace方法,这个方法无效因为隐藏了就无法现实。

于是本人试了用add(fragment),和remove方法,但是这个方法在用户点击两次无卡认证的时候会add两次直接导致崩溃。需要判断该fragment是否显示is hidden表示如果该fragment隐藏就show显示,然后就可以实现该fragment和activy一部分界面之间的切换。


楼主在以为已经全美实现该功能的时候,测试过程中发现了一个bug,就是点击上面的fragment的空白处,出点到下面覆盖掉的activity的checkbox控件,为了解决这个问题,当然可以把下面布局的checkbox位置修改,或者把上面fragment的空白加上图片之类的有控件就不会点击到下面的页面,但是改方法明显治标不治本。

后来查看资料,需要在fragment里面给整个fragment设置点击事件,来组织事件向下传递。


需要在fragment的onCreateView方法中添加

view.setOnClickListener(null);
这个方法就可以阻止点击到下面的布局。



  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值