【问题标题】:Move Data from Second Activity to first Activity将数据从第二个活动移动到第一个活动
【发布时间】:2018-12-13 12:46:05
【问题描述】:

我有一个 Activity 有一个空的 Text,你可以点击 add item 将文本添加到 Text,所以当我尝试将第二个 Activity 的数据添加到 main back 时,应用程序甚至不会启动。MainActivity

override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_main)
        val textView1: TextView = findViewById(R.id.num1)
        val textView2: TextView = findViewById(R.id.num2)
        val Button: Button = findViewById(R.id.button)
        val intent = intent
        val message: String = intent.getStringExtra(SecondActivity.EXTRA_MESSAGE)
        textView1.setText(message)
        Button.setOnClickListener(){
            val intent: Intent = Intent(this, SecondActivity::class.java)
            startActivity(intent)
        }
    }

第二个活动:

override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_second)
        val item = edit.text.toString()
        button.setOnClickListener(){
            val intent = Intent(this, MainActivity::class.java)
            intent.putExtra(EXTRA_MESSAGE , item)
            startActivity(intent)
        }
    }
    companion object {
        val EXTRA_MESSAGE: String =
            "com.example.android.twoactivities.extra.MESSAGE"
    }

【问题讨论】:

标签: java android xml kotlin


【解决方案1】:

你需要打电话

startActivityForResult(intent, request_code) ;

而不是

startActivity(intent);

为了在 onActivityResult 方法中接收响应。

【讨论】:

    【解决方案2】:

    打算从第一个活动接收数据。
    第 1 步:使用 Intent 和 startActivityForResult(Intent intent, int REQUEST_CODE) 启动 Second Activity 通过这样做,您将收到从第二个 Activity 发送的数据

    val 意图:Intent = Intent(this, SecondActivity::class.java) startActivityForResult(intent, 101)

    第 2 步:打开 Second Activity 并在您想要完成 Second Activity 的位置(即您想要向 First 发送数据的位置)编写以下代码活动) 注意:“KEY”和数据类型传递对于在First Activity

    中获得结果很重要
    val value : String = "sendBackData"
    val intent = Intent()
            resultIntent.putExtra("KEY", value)
            setResult(Activity.RESULT_OK, intent)
            finish()
    

    第 3 步:在第一个活动中。创建覆盖方法 onActivityResult 以使用 "KEY"

    将数据放入 First Activity

    注意:Second Activity中的key和onActivityResult of First Activity中的Key应该相同。

    override fun onActivityResult(int requestCode, int resultCode, Intent data) {
            super.onActivityResult(requestCode, resultCode, data);
    if(requestCode == 101 && resultCode == RESULT_Ok && data != null){
         val str : String = data.getStringExtra("KEY")
    }
    }
    

    【讨论】:

    • 第一个活动中的 onCreate() 之外。键入 onActivityResult() - 将出现自动完成,然后按 enter
    • 什么是ResultIntent
    • 您能否将其添加到我提供的代码中,以便我知道如何正确编写它
    • 这一行验证消息:String = intent.getStringExtra(SecondActivity.EXTRA_MESSAGE) 正在使我的应用崩溃
    • 请立即查看
    【解决方案3】:

    您好,使用startActivityForResult(intent, requestcode);,在您的 SecondActivty 中使用这个

    val myintent = Intent()
                resultIntent.putExtra("YourKey", value)
                setResult(Activity.RESULT_OK, myintent)
                finish()
    

    返回到您的 MainActivity。

    【讨论】:

      【解决方案4】:

      首先,从MainActivity到SecondActivity需要使用startActivityForResult()

          val requestCode = 0
          val intent = Intent(this, SecondActivity::class.java)
          intent.putExtra("your key","your value")
          this.startActivityForResult(intent, requestCode)
      

      您声明一个请求代码,一个整数,像现在一样声明意图,然后将您的密钥放入意图中。 重要的部分:您需要将 startActivityForResult 与您的意图和请求代码一起使用。

      现在,在第二个活动中,获取您的意图字符串:

       val string = intent.getStringExtra("your key")
      

      当你准备好返回一个值时,使用:

          val resultCode = 1
          val returnIntent = Intent()
          returnIntent.putExtra("your key","your value")
          setResult(resultCode, intent)
          finish()
      

      在您创建新意图的地方,您将需要放入的内容放入意图附加内容中,然后使用 setResult 将其返回 - 请记住 resultCode 和 requestCode。 finish() 是关闭你当前所在的activity(只设置结果不会关闭activity)

      最后,在你需要重写这个方法的主要活动上:

          override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?) {
          if (requestCode == yourRequestCode){
              if (resultCode == yourResultCode){
                  //do something
              }
          }
      
      }
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2015-05-26
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2016-03-21
        • 2015-01-01
        相关资源
        最近更新 更多