使用Intent将数据发送到主活动

问题描述 投票:0回答:1

我有一个任务,在这个任务中,我需要从第二个活动中的EditText中接收一个数据,并将其设置为主活动中的TextView文本,但我的解决方案无法工作。它从来没有在点击按钮时进入第二个活动,文本视图中的文本就这样消失了,因为在第二个活动中没有传递数据。下面是一个代码片段。

// MainActivity
private static final int MY_REQUESTCODE = 17762;
override fun onCreate(savedInstanceState: Bundle?) {
    super.onCreate(savedInstanceState)
    setContentView(R.layout.activity_main)


    val requestCode = 1
    button.setOnClickListener{
        val intent = Intent(this, SecondActivity::class.java)
        startActivityForResult(intent, MY_REQUESTCODE)
    }


}

override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?) {
    super.onActivityResult(requestCode, resultCode, data)
    if(resultCode == Activity.RESULT_OK && requestCode == MY_REQUESTCODE){
        val transferredData = data?.getStringExtra("name")
        textView.text = transferredData

    }
}

}

和第二个。

// SecondActivity
override fun onCreate(savedInstanceState: Bundle?) {
    super.onCreate(savedInstanceState)
    setContentView(R.layout.activity_second)
    intent.putExtra("name", name.text.toString())
    setResult(Activity.RESULT_OK, intent)
    finish()
}

}

android android-studio kotlin android-intent android-activity
1个回答
1
投票

看来你缺少了请求代码。最好为请求代码创建一个静态变量。比如说

public static String REQUEST_CODE_MY_ACTIVITY = 1

button.setOnClickListener{
        val intent = Intent(this, SecondActivity::class.java)
        startActivityForResult(intent, REQUEST_CODE_MY_ACTIVITY)
    }


override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?) {
    super.onActivityResult(requestCode, resultCode, data)
    if(resultCode == Activity.RESULT_OK && requestCode == REQUEST_CODE_MY_ACTIVITY){
        val transferredData = data?.getStringExtra("name")
        textView.text = transferredData

    }
}

希望这能帮助你。


1
投票

你的EditText没有任何东西可以返回。你应该创建一个Button,在你填写了EditText之后返回结果。

class SecondActivity : AppCompatActivity() {

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_second)

        button2.setOnClickListener {

            intent.putExtra("name", name.text.toString())
            setResult(Activity.RESULT_OK, intent)
            finish()
        }

    }
}

编辑:activity_main.xml

<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context=".MainActivity">

    <TextView
        android:id="@+id/textView"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="Hello World!"
        app:layout_constraintBottom_toBottomOf="parent"
        app:layout_constraintLeft_toLeftOf="parent"
        app:layout_constraintRight_toRightOf="parent"
        app:layout_constraintTop_toTopOf="parent" />
    <Button
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:id="@+id/button"
        android:text="@string/app_name"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintTop_toTopOf="parent"/>

</androidx.constraintlayout.widget.ConstraintLayout>

activity_second.xml

<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context=".SecondActivity">
    <Button
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:id="@+id/button2"
        android:text="Button2"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintTop_toTopOf="parent"/>

    <EditText
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:hint="Hello"
        android:id="@+id/name"
        app:layout_constraintTop_toTopOf="parent"
        app:layout_constraintStart_toStartOf="parent"/>

</androidx.constraintlayout.widget.ConstraintLayout>

主要活动


class MainActivity : AppCompatActivity() {

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_main)


        val requestCode = 1
        button.setOnClickListener{
            val intent = Intent(this, SecondActivity::class.java)
            startActivityForResult(intent, requestCode)
        }


    }

    override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?) {
        super.onActivityResult(requestCode, resultCode, data)
        if(resultCode == Activity.RESULT_OK && requestCode == requestCode){
            val transferredData = data?.getStringExtra("name")
            textView.text = transferredData
        }
    }
}
© www.soinside.com 2019 - 2024. All rights reserved.