【问题标题】:Get data from argument of fragment从片段的参数中获取数据
【发布时间】:2020-05-19 17:57:40
【问题描述】:

如何从片段的参数中获取数据?我从 MainActivity 调用片段 函数RegistrationCallFragment()

fun RegistrationCallFragment(){
val extras = getIntent().getExtras();
    if(extras != null) {
        val bundle = Bundle()

        bundle.putString("phone", extras.getString("phone", ""))
        bundle.putString("email", extras.getString("email", ""))
        bundle.putString("password", extras.getString("password", ""))

        Registration_second.getNewInstance(args = bundle)

    }
}

并将所有数据放入伴随对象的片段参数中

    fun getNewInstance(args: Bundle): Registration_second{
            val registrationSecond = Registration_second()
            registrationSecond.arguments = args
            return  registrationSecond
        }
    }

如何从伴随对象中获取这些数据?

所以,我找到了一些东西并在我的应用程序中执行 在这个函数中

fun RegistrationCallFragment(){

    fun RegistrationCallFragment(){
        //val extras = getIntent().getExtras();
        //if(extras != null) {
            //val s =extras?.getString("phone", "")
            val bundle = Bundle()
            bundle.putString("phone",
                FragmentManager.findFragment<SecondFragment>(View(this)).view?.findViewById<EditText>(R.id.phone_signup)?.text.toString()
            )
            bundle.putString("email",
                FragmentManager.findFragment<SecondFragment>(View(this)).view?.findViewById<EditText>(R.id.email_signup)?.text.toString()
            )
            bundle.putString("password",
                FragmentManager.findFragment<SecondFragment>(View(this)).view?.findViewById<EditText>(R.id.pasword_signup)?.text.toString()
            )

            Registration_second.getNewInstance(args = bundle)


        //}
    }

还有这个

bundle.putString("phone",
                FragmentManager.findFragment<SecondFragment>(View(this)).view?.findViewById<EditText>(R.id.phone_signup)?.text.toString()
            )

让我的应用崩溃。我做错了什么?

MainActivity 中的代码

        import android.content.Intent
    import android.os.Bundle
    import android.util.Log
    import android.view.View
    import android.widget.EditText
    import android.widget.Toast
    import androidx.appcompat.app.AppCompatActivity
    import androidx.fragment.app.FragmentManager
    import androidx.navigation.fragment.NavHostFragment.findNavController
    import androidx.navigation.fragment.findNavController


    class MainActivity : AppCompatActivity() {

        override fun onCreate(savedInstanceState: Bundle?) {
            super.onCreate(savedInstanceState)
            setContentView(R.layout.activity_main)
        }
        fun toastMe(Str: String) {
            val myToast = Toast.makeText(this,Str, Toast.LENGTH_SHORT)
            myToast.show()
        }
        fun RegistrationCallFragment(){

                val bundle = Bundle()
                bundle.putString("phone",
                    FragmentManager.findFragment<SecondFragment (View(this)).view?.findViewById<EditText>(R.id.phone_signup)?.text.toString()
            )
                bundle.putString("email",
                    FragmentManager.findFragment<SecondFragment>(View(this)).view?.findViewById<EditText>(R.id.email_signup)?.text.toString()
                )
                bundle.putString("password",
                    FragmentManager.findFragment<SecondFragment>(View(this)).view?.findViewById<EditText>(R.id.pasword_signup)?.text.toString()
                )

                Registration_second.getNewInstance(args = bundle)
        }

    }

fragment_second.xml 中的编辑文本

    <EditText
            android:id="@+id/phone_signup"
            android:layout_width="200dp"
            android:layout_height="40dp"
            android:hint="@string/phone"
            android:textColorHint="@color/grey"
            android:textColor="@color/black"
            android:background="@drawable/input_text"
            android:layout_gravity="center"
            android:layout_marginBottom="85dp"
            android:gravity="center"
            android:ems="10"
            android:inputType="phone"
            />

我获取数据的片段中的鳕鱼

    override fun onCreateView(
        inflater: LayoutInflater, container: ViewGroup?,
        savedInstanceState: Bundle?
    ): View? {
        // Inflate the layout for this fragment

        //val extras = getIntent()?.getExtras();
        //if(extras != null) {
        //    val phone = extras.getString("phone", "")
        //    val email = extras.getString("email", "")
        //    val password = extras.getString("password", "")
        //return inflater.inflate(R.layout.fragment_registration_second, container, false)

        val phone = arguments?.getString("phone", "")
        val email = arguments?.getString("email", "")
        val password = arguments?.getString("password", "")
        Log.d("PHONE BLYAT", phone+email+password+"THis")
        print(phone+email+password)
        val activ = activity
        (activ as MainActivity).toastMe(phone.toString())
        return inflater.inflate(R.layout.fragment_registration_second, container, false)
    }

日志

【问题讨论】:

    标签: java android android-fragments kotlin android-activity


    【解决方案1】:

    在您的 Registration_second 片段 onCreate 方法 getData 从参数如下代码:

      override fun onCreate(savedInstanceState: Bundle?) {
            super.onCreate(savedInstanceState)
            arguments?.let {
    
                       val phone = it.getStringExtra("phone")
                       val email = it.getStringExtra("email")
                       val password = it.getStringExtra("passsword")
             }       
        }
    
    

    【讨论】:

    • 在扩展片段布局之前删除您正在显示的 toast
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-12-06
    • 1970-01-01
    相关资源
    最近更新 更多