【Android开发】Fragment传值

Activity向Fragment传值

方法一
//Activity
fun myClick(view: View) {
        val transaction = supportFragmentManager.beginTransaction()
        when (view.id) {
            R.id.rb_index -> transaction.replace(R.id.container1, IndexFragment())
            R.id.rb_channel -> {
                //1. 实例化Fragment
                val f1: Fragment = Fragment1()
                //2. 实例化一个Bundle对象
                val bundle = Bundle()
                //3. 存入数据到Bundle对象
                bundle.putString("msg1", "这是由Activity发往Fragment的数据")
                //4. 调用Fragment的setArguments方法,传入Bundle对象
                f1.arguments = bundle
                //5. 添加/替换显示的Fragment
                transaction.replace(R.id.container1, f1)
            }
            R.id.rb_list -> transaction.replace(R.id.container1, Fragment2())
            R.id.rb_me -> transaction.replace(R.id.container1, Fragment3())
        }
        transaction.commit()
    }
	//Fragment
    override fun onCreateView(
        inflater: LayoutInflater, container: ViewGroup?,
        savedInstanceState: Bundle?
    ): View? {
        // Inflate the layout for this fragment
        val v = inflater.inflate(R.layout.fragment_1, container, false)
        val arguments = arguments
        val msg1 = arguments!!.getString("msg1")
        (v.findViewById<View>(R.id.txt1) as TextView).text = msg1

        return v
    }
class TabFragmentActivity : AppCompatActivity() {
	fun sendMsg(): String {
        return "这是一个普通方法传递过去的消息"
    }
}
方法二
//fragment
	override fun onAttach(context: Context) {
        super.onAttach(context)
        val msg = (context as TabFragmentActivity).sendMsg()
        Toast.makeText(context, msg, Toast.LENGTH_SHORT).show()
    }

Fragment向Activity传值

Fragment向Activity传值(接口回调)

  1. 定义一个接口,在该接口中声明一个用于传递数据的方法
  2. 让该Activity实现该接口,然后重写回调方法,获取传入的值,然后做处理
  3. 在自定义Fragment中,声明一个回调接口的引用
  4. 在onAttach方法中,为第三步的引用赋值
  5. 在引用调用传递数据的方法
class Fragment3 : Fragment() {
	//3
    private var myListener: MyListener? = null
    override fun onAttach(context: Context) {
        super.onAttach(context)
        //4
        myListener = activity as MyListener?
        //5
        myListener!!.sendMsg("消息")
    }

	//1
    interface MyListener {
        fun sendMsg(msg: String?)
    }
}
//2
class TabFragmentActivity : AppCompatActivity(), Fragment3.MyListener {
    override fun sendMsg(msg: String?) {
        Log.e("TAG", "Fragment传回的数据:$msg")
    }
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值