Отправка данных в основной вид деятельности с помощью намерения - PullRequest
0 голосов
/ 29 апреля 2020

У меня есть задача, в которой мне нужно получить данные из 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()
}

}

Ответы [ 2 ]

1 голос
/ 29 апреля 2020

Ваш EditText не имеет ничего для возврата. Вы должны создать кнопку и вернуть результат после заполнения вашего 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()
        }

    }
}

Edit: 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>

MainActivity


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
        }
    }
}
1 голос
/ 29 апреля 2020

Похоже, вам не хватает кода запроса. Лучше создать переменную stati c для кода запроса. Например,

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

    }
}

Надеюсь, это поможет.

...