android 表单信息提交与设计之美

需求如下:一个界面多个fragment表单信息,每个fragment表单信息检查输入信息符合规则才能到下一个fragment表单,在最后一个表单提交所有信息到服务器,系统返回和自定义返回按钮依次回退fragment后再退出activity


思索之余定下UML图如下

在这里插入图片描述

编码的时候开始思考如何让代码写的更优雅一些,让代码更具有可读性?首先我们要确定我们必须要做的事:检查输入内容是否符合规则和获取表单信息用于请求提交到服务器

切换fragment具体实现放在BaseActivity,BaseFragment有BaseActivity就可以直接调用,系统返回键和自定义返回键的拦截回退fragment自然也就再BaseActivity实现,这样每个fragment都可以方便调用

下面是一段伪代码块关于BaseActivity


abstract class BaseActivity : AppCompatActivity(){

    var fragmentList:ArrayList<BaseFragment> = ArrayList()

    private var currentPosition = 0

    public fun checkAllCommitMessage():Boolean{
        var flag = true
        for (i in 0 until fragmentList.size){
            if(!fragmentList[i].checkCommitMessage()){
                flag = false
                break
            }
        }
        return flag
    }

    public fun getAllCommitMessage():HashMap<String,Any>{
        var map = HashMap<String,Any>()
        for (i in 0 until fragmentList.size){
            fragmentList[i].getCommitMessage(map)
        }
        return map
    }

    public fun showNextFragment(){
        currentPosition += 1
    }

    public fun showPreviousFragment(){
        currentPosition -= 1
    }
    public fun showFragment(position:Int){
        currentPosition = position
    }

    public fun commit(){
        var commitMap = getAllCommitMessage()
    }

    public fun onBack(){
        if(currentPosition!=0){
            showPreviousFragment()
        }else{
            finish()
        }
    }
}

根据上面两个Base类,编写一个测试类Fragment 如下


class UserInformationFragment : BaseFragment(){
    override fun getCommitMessage(map: HashMap<String, Any>): HashMap<String, Any> {
        map.apply {
            map["name"] = "idea"
            map["age"] = 18
        }
        return map
    }

    override fun checkCommitMessage(): Boolean {
        var flag = true
        if(!InputHelper.check(name.text.toString(),age.text.toString())){
            flag = false
        }
        return flag
    }
}

当你在Fragment需要调用接口提交数据时候,下面一行代码就能搞定


class WorkInformationFragment : BaseFragment(){
    
    fun commit(){
        getBaseActivity().commit()
    }
}

代码这样写,fragment看起来是不是更简洁明了了,思维逻辑是不是更清晰了呢?

划水的博主在此跪求铁打的读者:老铁留下你的观点呗!

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值