Как вы передаете данные из текущей деятельности в предыдущую деятельность - PullRequest
0 голосов
/ 19 октября 2018

Я пытаюсь передать значение из упражнения 3 в упражнение 2, но получаю нулевое значение.Если я нажимаю кнопку «Назад», происходит переход к предыдущему действию, но значение равно нулю.Добавлен предложенный код подхода ниже.но все еще не в состоянии получить результаты.

Suggested Approach:

Activity :3

   override fun onBackPressed() {
        sendDataBackToPreviousActivity()
        super.onBackPressed()
     }

    private fun sendDataBackToPreviousActivity()
    {
        val navBarTitle21=intent.getStringExtra(TestProjectMenuViewHolder.TEST_TITLE_NAME)
        val intent=Intent().apply { putExtra("ReturnMessage",navBarTitle21)}
        setResult(Activity.RESULT_OK,intent)
    }


    Activity:2

    Main Class:
        companion object {
        const val START_ACTIVITY_3_REQUEST_CODE = 0
    }
  val intent=Intent(this,TestProjectMenuDetail::class.java)
        startActivityForResult(intent, START_ACTIVITY_3_REQUEST_CODE)

    Declared outside Main Class:

       override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?) {
        if (requestCode == START_ACTIVITY_3_REQUEST_CODE) {
            if (resultCode == Activity.RESULT_OK) {
                val message = data!!.getStringExtra("ReturnMessage")
                Toast.makeText(this, message, Toast.LENGTH_SHORT).show()
                println("Message Value: $message")
            }
        } else {
            super.onActivityResult(requestCode, resultCode, data)
        }
    }

First Approach:
    Activity:3
    val navBarTitle= intent.getStringExtra(TestMenuViewHolder.TEST_TITLE_KEY)
        supportActionBar?.title=navBarTitle//Something Like "StackOverFlow". THis is for back Button
            TestMenuDetail:
            val navBarTitle2=intent.getStringExtra(TestMenuViewHolder.TEST_TITLE_NAME)
            val TestVar=Intent(this@TestMenuDetail,TestMenuList::class.java)
            intent.putExtra("TestVar2",navBarTitle2)
            println("Test Value $navBarTitle2")//Test Value Hello

    Activity:2      
    TestMenuList:
            val navBarTitle3=intent.getStringExtra("TestVar2")
            println("Helllo Test: $navBarTitle3")//Helllo Test: null

Ответы [ 3 ]

0 голосов
/ 19 октября 2018

Вы должны использовать startActivityForResult API для выполнения вашей задачи.

Activity2.kt

class Activity2 : AppCompatActivity() {
    companion object {
        const val START_ACTIVITY_3_REQUEST_CODE = 0
    }

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

        // Start Activity3
        val intent = Intent(this, Activity3::class.java)
        startActivityForResult(intent, START_ACTIVITY_3_REQUEST_CODE)
    }

    override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?) {
        if (requestCode == START_ACTIVITY_3_REQUEST_CODE) {
            if (resultCode == Activity.RESULT_OK) {
                val message = data!!.getStringExtra("message")
                Toast.makeText(this, message, Toast.LENGTH_SHORT).show()
            }
        } else {
            super.onActivityResult(requestCode, resultCode, data)
        }
    }
}

Activity3.kt

class Activity3 : AppCompatActivity() {

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

    override fun onBackPressed() {
        sendDataBackToPreviousActivity()
        super.onBackPressed()
    }

    /**
     * Send data back to previous activity which start this one, you can call this method when users press on back key
     * or when users press on a view (button, image, etc) on this activity.
     */
    private fun sendDataBackToPreviousActivity() {
        val intent = Intent().apply {
            putExtra("message", "This is a message from Activity3")
            // Put your data here if you want.
        }
        setResult(Activity.RESULT_OK, intent)
    }
}
0 голосов
/ 23 октября 2018

Вы всегда можете использовать SharedPreferences, а затем очистить их после получения данных в предыдущем действии.Это 100% эффективный способ.Поместите это:

val sharedPreference =  getSharedPreferences("prefs name",Context.MODE_PRIVATE)
var editor = sharedPreference.edit()
editor.putString("your value name","value")
editor.commit()

и получите:

sharedPreference.getString("your value name","default value")

, но, конечно, вам придется снова открыть настройки в предыдущем упражнении;)

val sharedPreference =  getSharedPreferences("prefs name",Context.MODE_PRIVATE)
0 голосов
/ 19 октября 2018

Хорошо, вот что я хотел бы сделать:

Переопределить метод onBackPressed, а затем передать значение переменной внутри метода с помощью Intent.И в действии 2 получите значение из действия 3.

В действии 3

@override
public void onBackPressed (){

    Intent intent = new Intent(getApplicationContext(), Activity2.class);

    intent.put("value_key", value);
    startActivity(intent);
}

Получите значение в действии 2

getIntent.getValue("value_key");

Не забудьте проверитьсинтаксис, я только что написал это с моего телефона.Надеюсь, это поможет!

...