首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >从儿童活动到科林的主要活动

从儿童活动到科林的主要活动
EN

Stack Overflow用户
提问于 2022-01-28 11:30:16
回答 1查看 649关注 0票数 1

嗨,我对android开发(我正在使用Kotlin)非常陌生,而startActivityForResult则反对,试图制作一个简单的应用程序,使其变得简单:

我有一个主活动,有两个按钮,第一个活动和第二个活动。

我有一个带有文本字段和finish按钮的“子”活动。

当我单击main activity按钮时,子活动将打开(它的工作数据也可以是我从main活动传递的访问)。然后,我将一些文本放到文本字段中,当我单击finish按钮时,我希望将文本字段中的数据传输到主活动中,但我无法做到这一点。跟随介质,yt和堆叠溢出无法使它工作。

我的主要活动代码

代码语言:javascript
复制
   package com.example.data

 import android.app.Activity
import android.app.Instrumentation
import android.content.Intent
    import androidx.appcompat.app.AppCompatActivity
  import android.os.Bundle
 import android.preference.PreferenceManager
 import android.widget.Button
  import android.widget.EditText
  import android.widget.TextView
import android.widget.Toast
import androidx.activity.result.ActivityResult
import androidx.activity.result.ActivityResultCallback
import androidx.activity.result.ActivityResultLauncher
 import androidx.activity.result.contract.ActivityResultContracts

  class MainActivity : AppCompatActivity() {
companion object{
  private const val FIRST_ACTIVITY_RESULT = 1
}
lateinit var activityResultLauncher: ActivityResultLauncher<Intent>

  override fun onCreate(savedInstanceState: Bundle?) {
    super.onCreate(savedInstanceState)
    setContentView(R.layout.activity_main)
    val firstbtn = findViewById<Button>(R.id.first_activity_btn)
    val first_text = findViewById<TextView>(R.id.first_activity_text)
    val secondbtn = findViewById<Button>(R.id.second_activity_btn)
    val edit = findViewById<EditText>(R.id.edit_name)


     firstbtn.setOnClickListener{
        var intent = Intent(this,first_activity::class.java)
      intent.putExtra("data_name",edit.text.toString())
        activityResultLauncher.launch(intent)

        finish()
    }

    secondbtn.setOnClickListener{
        var intent = Intent(this,second_activity::class.java)
        startActivity(intent)
        finish()
    }

    activityResultLauncher = registerForActivityResult(
        ActivityResultContracts.StartActivityForResult()){ result:ActivityResult?->
        if (result!!.resultCode == Activity.RESULT_OK){
            if(result.data!!.extras!!.getString("data_transfer").toString() == "yes"){

                Toast.makeText(applicationContext, "user send reply", Toast.LENGTH_SHORT).show()
            }else{
                Toast.makeText(applicationContext, "sorry user did not send reply", Toast.LENGTH_SHORT).show()
            }
        }
    }

  }
       }

第一活动码

代码语言:javascript
复制
   package com.example.data

  import android.app.Activity
  import android.content.Intent
 import androidx.appcompat.app.AppCompatActivity
 import android.os.Bundle
 import android.widget.Button
  import android.widget.EditText
  import android.widget.TextView

    class first_activity : AppCompatActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
    super.onCreate(savedInstanceState)
    setContentView(R.layout.activity_first)
    val finish = findViewById<Button>(R.id.finish_btn)
    val textData = findViewById<TextView>(R.id.tv_first_activity)
    val edit = findViewById<EditText>(R.id.edit_text_first_activity)

    textData.text = intent.extras!!.getString("data_name")

    finish.setOnClickListener{
  //            val intent = Intent(this,MainActivity::class.java)
    //            intent.putExtra("success","success message woohooo!!!")
      //            startActivity(intent)
        val intent = Intent()
   //            val intent = Intent(this,MainActivity::class.java)
        intent.putExtra("data_transfer",edit.text.toString())
        setResult(Activity.RESULT_OK,intent)
    //            startActivity(intent)
        finish()
    }
}
     }
EN

回答 1

Stack Overflow用户

发布于 2022-01-28 12:06:15

您需要的是registerForActivityResult(),这里是一个示例项目,您可以阅读更多关于这个新API的内容。

用例:用户通过输入输入(第二个活动)并单击按钮可以增强MainActivity中的输入文本(第一个活动):

MainActivity类:

代码语言:javascript
复制
    import android.app.Activity
import android.content.Intent
import androidx.appcompat.app.AppCompatActivity
import android.os.Bundle
import android.widget.Button
import android.widget.TextView
import androidx.activity.result.contract.ActivityResultContracts

class MainActivity : AppCompatActivity() {
    lateinit var txt:TextView
    lateinit var btn:Button
    private val secondActivityWithResult =
        registerForActivityResult(ActivityResultContracts.StartActivityForResult())
        { result ->
            if (result.resultCode == Activity.RESULT_OK){
                result.data?.getStringExtra("name")?.let { txt.text = it }
            }
        }
    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_main)
        btn = findViewById(R.id.next_activity)
        txt = findViewById(R.id.returned_text)
        btn.setOnClickListener{
            secondActivityWithResult.launch(Intent(this,SecondActivity::class.java))
        }
    }
}

activity_main XML:

代码语言:javascript
复制
    <?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">

    <Button
        android:id="@+id/next_activity"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="Button"
        app:layout_constraintBottom_toBottomOf="parent"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintStart_toStartOf="parent" />

    <TextView
        android:id="@+id/returned_text"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="your string appear here"
        app:layout_constraintBottom_toBottomOf="parent"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toTopOf="parent" />
</androidx.constraintlayout.widget.ConstraintLayout>

SecondActivity类:

代码语言:javascript
复制
import android.app.Activity
import android.content.Intent
import androidx.appcompat.app.AppCompatActivity
import android.os.Bundle
import android.widget.Button
import android.widget.EditText


class SecondActivity : AppCompatActivity() {
    lateinit var input:EditText
    lateinit var btn:Button
    
    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_second)
        btn = findViewById(R.id.return_btn)
        input = findViewById(R.id.my_input)

        btn.setOnClickListener{
            SharedValues.myString = input.text.toString()
            val intent = Intent()
            intent.putExtra("name","my love is NAHID MORADI")
            setResult(Activity.RESULT_OK,intent)
            finish()
     
        }
    }
}

activity_second XML:

代码语言:javascript
复制
    <?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">

    <EditText
        android:id="@+id/my_input"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_marginTop="88dp"
        android:ems="10"
        android:hint="type here"

        android:inputType="textPersonName"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintHorizontal_bias="0.497"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toTopOf="parent" />

    <Button
        android:id="@+id/return_btn"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_marginTop="76dp"
        android:text="Return To FirstActivity"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintHorizontal_bias="0.498"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toBottomOf="@+id/my_input" />
</androidx.constraintlayout.widget.ConstraintLayout>
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/70893021

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档