【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")
    }
}

猜你喜欢

转载自blog.csdn.net/weixin_42020386/article/details/112867001
今日推荐