📌  相关文章
📜  如何在 Android 中将数据从 Activity 发送到 Fragment?

📅  最后修改于: 2022-05-13 01:55:45.140000             🧑  作者: Mango

如何在 Android 中将数据从 Activity 发送到 Fragment?

先决条件:

  • Android 中的 Activity 介绍
  • Android 中的 Fragment 简介

在 Android 中,片段是用户界面的一部分,可以反复使用。 Fragment 管理自己的布局,有自己的生命周期。由于片段是较大用户界面的一小部分,因此它只能在活动或另一个片段内初始化。因此,如果我们希望在片段中显示任何类型的资源,例如字符串或图像,我们需要在活动中声明它们,然后将其传递给片段。因此,在本文中,我们将向您展示如何将数据从 Activity 传递到 Fragment。

分步实施

第 1 步:在 Android Studio 中创建一个新项目

要在 Android Studio 中创建新项目,请参阅如何在 Android Studio 中创建/启动新项目。我们在Kotlin 中演示了该应用程序,因此请确保在创建新项目时选择 Kotlin 作为主要语言。

第二步:在layout文件夹中创建自定义fragment布局(my_custom_fragment.xml)



我们将向片段传递一个字符串。为了显示这个字符串,我们实现了一个 TextView。

XML


  
    
    
  


XML


  
    
    
  
    
    


Kotlin
import android.os.Bundle
import android.view.LayoutInflater
import android.view.View
import android.view.ViewGroup
import android.widget.TextView
import androidx.fragment.app.Fragment
  
class MyCustomFragment: Fragment() {
  
    // Declaring TextView fro the custom fragment layout
    private lateinit var myTextView: TextView
  
    // Override function when the view is being created
    override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?): View {
  
        // Inflates the custom fragment layout
        val view: View = inflater.inflate(R.layout.my_custom_fragment, container, false)
  
        // Finds the TextView in the custom fragment
        myTextView = view.findViewById(R.id.fragmentTextView) as TextView
  
        // Gets the data from the passed bundle
        val bundle = arguments
        val message = bundle!!.getString("mText")
  
        // Sets the derived data (type String) in the TextView
        myTextView.text = message
  
        return view
    }
}


Kotlin
import androidx.appcompat.app.AppCompatActivity
import android.os.Bundle
import android.widget.Button
import android.widget.EditText
  
class MainActivity : AppCompatActivity() {
    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_main)
  
        // Declaring and initializing the EditText and Button from the layout
        val mEditText = findViewById(R.id.editText)
        val mButton = findViewById


第三步:在布局文件(activity_main.xml)中添加EditText、Button、Frame

请参阅代码中的注释以更好地理解。

XML



  
    
    
  
    
    

第 4 步:为自定义片段创建一个类 (MyCustomFragment.kt)

这是一个自定义片段类,用于在主活动中存在的框架布局中扩充自定义布局。

科特林

import android.os.Bundle
import android.view.LayoutInflater
import android.view.View
import android.view.ViewGroup
import android.widget.TextView
import androidx.fragment.app.Fragment
  
class MyCustomFragment: Fragment() {
  
    // Declaring TextView fro the custom fragment layout
    private lateinit var myTextView: TextView
  
    // Override function when the view is being created
    override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?): View {
  
        // Inflates the custom fragment layout
        val view: View = inflater.inflate(R.layout.my_custom_fragment, container, false)
  
        // Finds the TextView in the custom fragment
        myTextView = view.findViewById(R.id.fragmentTextView) as TextView
  
        // Gets the data from the passed bundle
        val bundle = arguments
        val message = bundle!!.getString("mText")
  
        // Sets the derived data (type String) in the TextView
        myTextView.text = message
  
        return view
    }
}

第 5 步:初始化 MyCustomFragment 类并从 EditText (MainActivity.kt) 传递值

在这个程序中,EditText 值(输入字符串)是在单击按钮时获取的。自定义片段类被初始化并传递输入字符串以获得所需的结果。请参考下面代码中的注释以获得更好的理解。

科特林

import androidx.appcompat.app.AppCompatActivity
import android.os.Bundle
import android.widget.Button
import android.widget.EditText
  
class MainActivity : AppCompatActivity() {
    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_main)
  
        // Declaring and initializing the EditText and Button from the layout
        val mEditText = findViewById(R.id.editText)
        val mButton = findViewById

输出:

我们可以看到,当在 EditText 中输入文本并单击按钮时,在我们的自定义片段中显示相同的文本。

想要一个更快节奏和更具竞争力的环境来学习 Android 的基础知识吗?
单击此处前往由我们的专家精心策划的指南,旨在让您立即做好行业准备!