[Desarrollo de Android] Valor de transferencia de fragmentos

La actividad pasa valor a Fragmento

método uno

//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 "这是一个普通方法传递过去的消息"
    }
}

Método dos

//fragment
	override fun onAttach(context: Context) {
    
    
        super.onAttach(context)
        val msg = (context as TabFragmentActivity).sendMsg()
        Toast.makeText(context, msg, Toast.LENGTH_SHORT).show()
    }

El fragmento pasa valor a la actividad

El fragmento pasa el valor a la actividad (devolución de llamada de la interfaz)

  1. Definir una interfaz y declarar un método para pasar datos en la interfaz.
  2. Deje que la actividad implemente la interfaz, luego reescriba el método de devolución de llamada, obtenga el valor entrante y luego realice el procesamiento
  3. En el Fragmento personalizado, declare una referencia a la interfaz de devolución de llamada
  4. En el método onAttach, asigne un valor a la referencia en el tercer paso
  5. Método de pasar datos en la llamada de referencia
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")
    }
}

Supongo que te gusta

Origin blog.csdn.net/weixin_42020386/article/details/112867001
Recomendado
Clasificación