首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >如何将控制从片段交还给Activity?

如何将控制从片段交还给Activity?
EN

Stack Overflow用户
提问于 2019-03-21 02:07:10
回答 3查看 44关注 0票数 0

我有一个简单的CalculatorActivity,其中包含连续显示的片段:

  1. InputFragment //requests two input values for calclation
  2. ResultFragment // show the result of the calculation

为了简单起见,让我们假设,我想计算两个数字的和。我通过以下方式启动CalculatorActivity,它会立即加载InputFragment

代码语言:javascript
复制
fun replaceFragment(resId : Int, newFragment : Fragment){
    this.supportFragmentManager?.beginTransaction()?.replace(resId, newFragment)?.addToBackStack(null)?.commit()
}

resId是要在其中膨胀片段的容器的资源ID。newFragment是要膨胀的新片段。在第一步中,我调用了CalculatorActivityonCreate()

replaceFragment(R.id.container, InputFragment.getInstance())

到目前为止,它工作得很好。

但是,当我在InputFragment中输入所需的数字时,如何将值从InputFragment转发回调用CalculatorActivity,以便它可以继续并将ResultFragment膨胀到完全相同的容器中以显示计算结果?

EN

回答 3

Stack Overflow用户

发布于 2019-03-21 02:13:53

您总是可以从任何片段(通过使用getActivity)获取封闭的活动,然后将其转换为适当的类型并对其使用您自己的setValues方法。看看这个:https://developer.android.com/training/basics/fragments/communicating

票数 0
EN

Stack Overflow用户

发布于 2019-03-21 03:40:51

您可以将该值作为活动中的变量,也可以从片段中获取

代码语言:javascript
复制
CalculatorActivity myActivity = (CalculatorActivity)getActivity()
myActivity.setInputValues(fragmentInputValues)
myActivity.doSomethingWithTheValues()
票数 0
EN

Stack Overflow用户

发布于 2019-03-21 04:24:37

如果您正在学习,这只是为了好玩,那么可以直接转换到activity并访问它的公共方法。然而,在现实世界的实践中,我永远不会这样做。

最佳实践是在父活动上使用接口实现。

示例:接口类

代码语言:javascript
复制
interface IBaseActivityCallback {
    fun onInputValuesReady(myObjectOfValues: MyObject)
}

活动类

代码语言:javascript
复制
class CalculatorActivity : AppCompatActivity(), IBaseActivityCallback {
     override fun onInputValuesReady(myObjectOfValues: MyObject){
          //handle inflate or usage of values
     }
}

片段类

代码语言:javascript
复制
lateinit var baseActivityCallback: IBaseActivityCallback

override fun onAttach(context: Context) {
     super.onAttach(context)
     //NOTE* wrap in try/catch if context can be something else
     baseActivityCallback = context as IBaseActivityCallback
}

fun someButtonClicked(){
    baseActivityCallback.onInputValuesReady(myObjectToPass)
}

我想我不需要解释创建一个对象来保存变量或者被点击的按钮等等。所以我为你保留了这部分的一般性。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/55267500

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档