【问题标题】:How to change passed parameter type in Android studio如何在 Android Studio 中更改传递的参数类型
【发布时间】:2021-04-03 08:30:18
【问题描述】:

我是移动开发的新手。我正在尝试将参数从一个活动传递到另一个活动。但在第二个活动中,由于类型不匹配,我无法使用它。我把它当作字符串,但我应该把它用作 TextView。你能说我哪里做错了吗?

第一个活动

class ShowProfileActivity : AppCompatActivity() {

    private lateinit var fullnameTv: TextView
    private lateinit var nicknameTv: TextView
    private lateinit var locationTv: TextView
    private lateinit var emailTv: TextView
    private lateinit var bioTv: TextView

    // todo load from sp
    private val mockUser: User? = User("test ", "test", "test@gmail.com", "Italy", "test, this is a mocked bio")

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

        fullnameTv = findViewById(R.id.asp_user_name_tv)
        nicknameTv = findViewById(R.id.asp_user_nickname_tv)
        locationTv = findViewById(R.id.asp_user_location_tv)
        emailTv = findViewById(R.id.asp_user_email_tv)
        bioTv = findViewById(R.id.asp_user_bio_tv)


        // init views with user data
        fullnameTv.text = mockUser?.fullname
        nicknameTv.text = mockUser?.nickname
        locationTv.text = mockUser?.location
        emailTv.text = mockUser?.email
        bioTv.text = mockUser?.bio




        var editButton = findViewById<ImageButton>(R.id.editBtn);
        editButton.setOnClickListener {
            editProfile();
        }
    }

    fun editProfile() {
        val intent = Intent(this@ShowProfileActivity,EditProfileActivity::class.java)
        if (mockUser != null) {
            intent.putExtra("group23.lab1.user_fullname", mockUser.fullname)
            intent.putExtra("group23.lab1.user_nickname", mockUser.nickname)
            intent.putExtra("group23.lab1.user_location", mockUser.location)
            intent.putExtra("group23.lab1.user_email", mockUser.email)
            intent.putExtra("group23.lab1.user_bio", mockUser.bio)
        }
        startActivity(intent)
    }

    override fun onCreateOptionsMenu(menu: Menu?): Boolean {
        menuInflater.inflate(R.menu.show_profile_menu, menu)
        return true
    }

    override fun onOptionsItemSelected(item: MenuItem): Boolean {
        return when (item.itemId) {
            R.id.menu_show_profile_edit -> {
                /*
                TODO start edit profile activity (check activity name)
                val intent = Intent(this, com.group23.lab1.EditProfileActivity::class.java).apply {
                    if (mockUser != null) {
                        putExtra("group23.lab1.user_fullname", mockUser.fullname)
                        putExtra("group23.lab1.user_nickname", mockUser.nickname)
                        putExtra("group23.lab1.user_location", mockUser.location)
                        putExtra("group23.lab1.user_email", mockUser.email)
                        putExtra("group23.lab1.user_bio", mockUser.bio)
                    }
                }
                startActivityForResult(intent)
                */
                Toast.makeText(this, "OPEN EDIT PROFILE", Toast.LENGTH_SHORT).show()
                true
            }
            else -> super.onOptionsItemSelected(item)
        }
    }
}

第二个活动

class EditProfileActivity : AppCompatActivity() {

    private lateinit var fullnameTv: TextView
    private lateinit var nicknameTv: TextView
    private lateinit var locationTv: TextView
    private lateinit var emailTv: TextView
    private lateinit var bioTv: TextView



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

        val intent = intent

        fullnameTv = intent.getStringExtra("group23.lab1.user_fullname") //Type miss match error required textView but got String ?? 




        print(fullnameTv+" testt");

 }
}

【问题讨论】:

  • 为什么要将 TextView 传递给 SecondActivity?

标签: android kotlin android-intent


【解决方案1】:

您正在将字符串从 FirstActivity 传递给您的 SecondActivity,这是正确的方法。

在您的 SecondActivity 中接收该字符串并将其设置在您的 TextView 中。

val fullName = intent.getStringExtra("group23.lab1.user_fullname")
fullnameTv.text = fullName

【讨论】:

    【解决方案2】:

    您将fullnameTv 定义为TextView,但intent extra 包含string,这就是这两种类型不匹配的原因。
    您要做的是设置 textview 的 text 属性 - fullnameTv.text = intent.getStringExtra("group23.lab1.user_fullname")

    【讨论】:

      猜你喜欢
      • 2018-06-28
      • 2016-11-07
      • 1970-01-01
      • 1970-01-01
      • 2020-02-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-05-08
      相关资源
      最近更新 更多