首页 > 解决方案 > 如何保存我输入的编辑文本并在开始新意图时访问它?

问题描述

我正在尝试制作一个测验应用程序,以便当用户单击加号按钮时,它会将他们带到他们输入问题和答案的页面,然后他们可以保存并返回到上一页,其中有一个新按钮设置为问题的文本被创建。我已经对所有这些进行了编码和工作,除了如果用户想要编辑它可以保存以前输入的问题/答案活动状态的部分。我被告知我需要以捆绑的形式将我的主要活动中的问题和答案发送到我的第二个活动,但我不知道如何在我的主要活动中访问另一个布局 ID(以及如何在一般的)。有人可以帮忙吗?这是我的代码:

主要活动:

    package com.example.quest

import android.app.Activity
import android.app.AlertDialog
import android.content.Intent
import android.graphics.Color
import androidx.appcompat.app.AppCompatActivity
import android.os.Bundle
import android.util.Log
import android.view.Gravity
import android.widget.Button
import android.widget.LinearLayout
import android.widget.TextView
import com.google.android.material.floatingactionbutton.FloatingActionButton

class MainActivity : AppCompatActivity() {
    private val questionActivityCode = 2
    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_main)

        findViewById<FloatingActionButton>(R.id.btn2).setOnClickListener{
            startActivityForResult(Intent(this@MainActivity, SecondActivity::class.java), questionActivityCode)
        }
    }

    override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?) {
        super.onActivityResult(requestCode, resultCode, data)

        if (requestCode == questionActivityCode && resultCode == Activity.RESULT_OK) {
            createNewButtonWithText(data?.getStringExtra("test") ?: "")
        }
    }

    private fun createNewButtonWithText(text: String)
    {
        val newbutton = Button(this@MainActivity)
        val layout = findViewById<LinearLayout>(R.id.mainlayout)
        newbutton.text = text
        newbutton.layoutParams = LinearLayout.LayoutParams(LinearLayout.LayoutParams.WRAP_CONTENT, LinearLayout.LayoutParams.WRAP_CONTENT)
        newbutton.width=1010
        newbutton.height=300
        newbutton.gravity = Gravity.CENTER
        newbutton.translationX= 65F
        newbutton.setTextColor(Color.parseColor("#FFFFFFFF"))
        newbutton.setBackgroundColor(Color.parseColor("#250A43"))
        layout.addView(newbutton)

        val inflator = layoutInflater
        val builder = AlertDialog.Builder(this)
        val intent = Intent(this@MainActivity, SecondActivity::class.java)


        newbutton.setOnClickListener{
            val dialogLayout = inflator.inflate(R.layout.text, null)
            with(builder) {
                setTitle(newbutton.text)
                setPositiveButton("Edit"){dialog, which ->
                    startActivity(intent)
                }
                setNegativeButton("Cancel"){dialog, which ->
                    Log.d("Main", "Negative button clicked")
                }
                setView(dialogLayout)
                show()
        }
    }
}}

第二个活动:

    package com.example.quest

import android.app.Activity
import android.content.Intent
import androidx.appcompat.app.AppCompatActivity
import android.os.Bundle
import android.util.Log
import android.widget.EditText
import com.google.android.material.floatingactionbutton.FloatingActionButton

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

        val question = findViewById<EditText>(R.id.question)

        findViewById<FloatingActionButton>(R.id.btn3).setOnClickListener{
            val questiontext = question.text.toString()

            val returnIntent = Intent()
            returnIntent.putExtra("test", questiontext)
            setResult(Activity.RESULT_OK, returnIntent)

            finish()
        }
    }
}

标签: androidkotlin

解决方案


我不确定你想要达到什么目标。但我试图将您的问题分成 2 个问题。

  1. 您想保存输入的文本,以便以后进行编辑。

您可以使用共享首选项管理器

样本 :

    /*Save your values to SharedPreference*/
    // create shared Prefrence Manager
    // edit() This allows you to write key-value pairs to
    //SharedPreferences.
    val sharedPre = PreferenceManager.getDefaultSharedPreferences(applicationContext).edit()

    // add key-value pairs to SharedPreferences
    sharedPre.putString("Key","Value")

    // Instruct the SharedPreferences Editor instance to apply the changes.
    sharedPre.apply()


    /*Load your values from SharedPreference*/
    val loadSharedPre = PreferenceManager.getDefaultSharedPreferences(applicationContext)
    
    // its return Map with string and value
    loadSharedPre.all
  1. 以捆绑的形式将我的主要活动的问题和答案发送到我的第二个活动 您可以使用parcelable,有关更多详细信息,您可以访问此站点

推荐阅读