如何制作一个简单的数据输入应用程序,其中两个活动相互导航

问题描述 投票:0回答:1

我想制作一个简单的数据输入应用程序,其中应用程序从主要活动开始,并询问用户来自图库的信息和图像 URI,在用户输入提交时获取所有输入后,它会打开一个新活动,显示回收器视图中的信息,现在如果用户想要添加更多用户,回收器视图屏幕底部有一个浮动操作按钮,我又想重新访问同一页面来询问用户详细信息,我该如何实现此功能在我的代码中

到目前为止,我已经实现了主要活动,第一个用户的详细信息显示正确,但是在输入第二个用户的详细信息时,第一个用户被覆盖。

主要活动

package com.example.recyclerview_firebase

import android.content.Intent
import android.os.Bundle
import android.provider.MediaStore
import android.util.Log
import android.view.View
import android.widget.Button
import android.widget.EditText
import android.widget.ImageView
import androidx.appcompat.app.AppCompatActivity

class MainActivity : AppCompatActivity() {
    private lateinit var choose_pic: Button
    private lateinit var submit: Button
    private lateinit var preview_img: ImageView
    private lateinit var heading: EditText
    private lateinit var subhead: EditText
    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_main)

        choose_pic = findViewById(R.id.add_pic)
        submit = findViewById(R.id.submit)
        heading = findViewById(R.id.name)
        subhead = findViewById(R.id.proffesion)
        preview_img = findViewById(R.id.imageView)



        choose_pic.setOnClickListener {
            val intent = Intent(Intent.ACTION_PICK,MediaStore.Images.Media.EXTERNAL_CONTENT_URI)
            startActivityForResult(intent,101)
        }
    }

    @Deprecated("Deprecated in Java")
    override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?) {
        super.onActivityResult(requestCode, resultCode, data)
        if (resultCode == RESULT_OK && requestCode == 101)
        {
            preview_img.setImageURI(data?.data)
            preview_img.visibility = View.VISIBLE
        }
        submit.setOnClickListener {
            Log.i("Button", "Button clicked")
            val intent = Intent(this,list::class.java)
            val image = data?.data
            val name = heading.text.toString()
            val profession = subhead.text.toString()
            intent.putExtra("image",image)
            intent.putExtra("name", name)
            intent.putExtra("profession",profession)
            startActivity(intent)
        }
    }
}

列出活动

package com.example.recyclerview_firebase

import android.app.Dialog
import android.content.Intent
import android.net.Uri
import androidx.appcompat.app.AppCompatActivity
import android.os.Bundle
import android.provider.MediaStore
import android.util.Log
import android.view.View
import android.view.Window
import android.widget.Button
import android.widget.EditText
import android.widget.ImageView
import androidx.lifecycle.ViewModelProvider
import androidx.recyclerview.widget.LinearLayoutManager
import androidx.recyclerview.widget.RecyclerView
import com.google.android.material.floatingactionbutton.FloatingActionButton

class list : AppCompatActivity() {
    private lateinit var recycle: RecyclerView
    private lateinit var adapter: listadapter
    private lateinit var factory: factorymodel
    private lateinit var repo: repo
    private lateinit var fab: FloatingActionButton
    private lateinit var name: EditText
    private lateinit var profession: EditText
    private lateinit var addpic: Button
    private lateinit var submit: Button
    private lateinit var preview_img: ImageView
    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        val image: Uri? = intent.getParcelableExtra("image")
        val name = intent.getStringExtra("name")
        val profession = intent.getStringExtra("profession")
        setContentView(R.layout.recyclerview)
        recycle = findViewById(R.id.rv)
        repo = repo()
        factory = factorymodel(repo)
        val view: viewmodel by lazy {
            ViewModelProvider(this,factorymodel(repo))[viewmodel::class.java]
        }
        view.list.observe(this){
            adapter = listadapter(it)
            recycle.adapter = adapter
        }
        recycle.layoutManager = LinearLayoutManager(this)

        val contact = user(image!!,name!!,profession!!)
        view.addcontact(contact)
        Log.i("Button","User added via list")
        fab = findViewById(R.id.fab)
        fab.setOnClickListener{
            showdialog()
        }
    }

    private fun showdialog() {
        val dialog = Dialog(this)
        dialog.setCancelable(true)
        dialog.setContentView(R.layout.activity_main)
        dialog.requestWindowFeature(Window.FEATURE_NO_TITLE)
        name = findViewById(R.id.name)
        profession = findViewById(R.id.proffesion)
        addpic = findViewById(R.id.add_pic)
        submit = findViewById(R.id.submit)
        preview_img = findViewById(R.id.imageView)
        addpic.setOnClickListener {
            val intent = Intent(Intent.ACTION_PICK, MediaStore.Images.Media.EXTERNAL_CONTENT_URI)
            startActivityForResult(intent, 101)
        }
    }

    override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?) {
        super.onActivityResult(requestCode, resultCode, data)
        if (resultCode == RESULT_OK && requestCode == 101)
        {
            preview_img.setImageURI(data?.data)
            preview_img.visibility = View.VISIBLE
        }
        submit.setOnClickListener {
            val intent = Intent(this,list::class.java)
            val newimage = data?.data
            val newname = name.text.toString()
            val newprofession = profession.text.toString()
            intent.putExtra("image",newimage)
            intent.putExtra("name",newname)
            intent.putExtra("profession",newprofession)
            startActivity(intent)
        }
    }
}
android kotlin android-recyclerview android-viewmodel
1个回答
0
投票

看起来这个问题是当您从 MainActivity 启动列表活动时,您通过 Intent extras 传递数据,但是当您想从列表活动添加新用户时,您将启动列表活动的新实例返回到同一个实例。

我相信您应该更改处理在同一列表活动实例中添加新用户的方法。

class list : AppCompatActivity() {
    private lateinit var recycle: RecyclerView
    private lateinit var adapter: listadapter
    private lateinit var factory: factorymodel
    private lateinit var repo: repo
    private lateinit var fab: FloatingActionButton
    private lateinit var name: EditText
    private lateinit var profession: EditText
    private lateinit var addpic: Button
    private lateinit var submit: Button
    private lateinit var preview_img: ImageView
    private val userList = mutableListOf<user>()

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.recyclerview)
        recycle = findViewById(R.id.rv)
        repo = repo()
        factory = factorymodel(repo)
        val view: viewmodel by lazy {
            ViewModelProvider(this,factorymodel(repo))[viewmodel::class.java]
        }
        view.list.observe(this){
            adapter = listadapter(it)
            recycle.adapter = adapter
        }
        recycle.layoutManager = LinearLayoutManager(this)
        
        fab = findViewById(R.id.fab)
        fab.setOnClickListener{
            showdialog()
        }
    }

    private fun showdialog() {
        val dialog = Dialog(this)
        dialog.setCancelable(true)
        dialog.setContentView(R.layout.activity_main)
        dialog.requestWindowFeature(Window.FEATURE_NO_TITLE)
        name = dialog.findViewById(R.id.name)
        profession = dialog.findViewById(R.id.proffesion)
        addpic = dialog.findViewById(R.id.add_pic)
        submit = dialog.findViewById(R.id.submit)
        preview_img = dialog.findViewById(R.id.imageView)
        addpic.setOnClickListener {
            val intent = Intent(Intent.ACTION_PICK, MediaStore.Images.Media.EXTERNAL_CONTENT_URI)
            startActivityForResult(intent, 101)
        }

        submit.setOnClickListener {
            val image = preview_img.drawable.toBitmap()
            val newname = name.text.toString()
            val newprofession = profession.text.toString()
            val newUser = user(image, newname, newprofession)
            userList.add(newUser)
            adapter.notifyDataSetChanged()
            dialog.dismiss()
        }

        dialog.show()
    }

    override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?) {
        super.onActivityResult(requestCode, resultCode, data)
        if (resultCode == RESULT_OK && requestCode == 101)
        {
            preview_img.setImageURI(data?.data)
            preview_img.visibility = View.VISIBLE
        }
    }
}
© www.soinside.com 2019 - 2024. All rights reserved.