【发布时间】:2021-08-19 09:59:32
【问题描述】:
我想在 MainActivity 和 ListAdapter 之间共享数据。问题是意图显示为“未解决的参考”。主要问题是我无法将“主”变量从 MainActivity 传输到 ListAdapter,我真的需要这个变量,因为我需要在我的应用程序中加密我的密码。
列表适配器
package com.example.roomapp.fragments.list
import android.app.PendingIntent.getActivity
import android.content.ContentValues.TAG
import android.content.Context
import android.content.Intent
import android.view.LayoutInflater
import android.view.View
import android.view.ViewGroup
import androidx.recyclerview.widget.RecyclerView
import com.example.roomapp.AESKnowledgeFcatory.encrypt
import com.example.roomapp.R
import com.example.roomapp.data.User
import kotlinx.android.synthetic.main.custom_row.view.*
import android.content.SharedPreferences
import com.example.roomapp.HashUtils.sha256
import com.example.roomapp.MainActivity
import android.content.Intent.getIntent
import android.os.Bundle
import android.util.Log
import android.widget.Toast
class ListAdapter(): RecyclerView.Adapter<ListAdapter.MyViewHolder>() {
private var userList = emptyList<User>()
class MyViewHolder(itemView: View): RecyclerView.ViewHolder(itemView) {}
override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): MyViewHolder {
return MyViewHolder(LayoutInflater.from(parent.context).inflate(R.layout.custom_row, parent, false))
}
override fun getItemCount(): Int {
return userList.size
}
override fun onBindViewHolder(holder: MyViewHolder, position: Int) {
val extras = getIntent().extras
if(extras!=null)
{
val value = extras.getString("key")
}
val currentItem = userList[position]
holder.itemView.id_txt.text = currentItem.id.toString()
holder.itemView.firstName_txt.text = currentItem.firstName
holder.itemView.lastName_txt.text = encrypt(currentItem.lastName,sha256(i+currentItem.salt.toString()))
holder.itemView.salt_txt.text = currentItem.salt
}
fun setData(user: List<User>){
this.userList = user
notifyDataSetChanged()
}
}
主活动
package com.example.roomapp
import android.content.Intent
import androidx.appcompat.app.AppCompatActivity
import android.os.Bundle
import android.view.View
import androidx.fragment.app.Fragment
import androidx.navigation.findNavController
import androidx.navigation.ui.setupActionBarWithNavController
import com.example.roomapp.AESKnowledgeFcatory.decrypt
import com.example.roomapp.HashUtils.sha256
import com.example.roomapp.fragments.add.AddFragment
import com.example.roomapp.fragments.list.ListAdapter
import com.example.roomapp.fragments.list.ListFragment
import kotlinx.android.synthetic.main.activitycreate.*
import kotlinx.android.synthetic.main.activitylogin.*
import kotlinx.android.synthetic.main.custom_row.*
import kotlin.properties.ReadOnlyProperty
import kotlin.reflect.KProperty
class MainActivity : AppCompatActivity() {
var master: String = "0"
var checkLogin2: String = ""
var lf_ch = false
fun createMaster(v:View){
this.master = this.editmasterpass.text.toString()
val sharedPref = this.getPreferences(MODE_PRIVATE) ?:return
with (sharedPref.edit()){
putString("cheie",sha256(master))
commit()
}
val sharedPref2 = this.getPreferences(MODE_PRIVATE) ?: return
val defaultValue = sharedPref2.getString("cheie", "ABA")
System.out.println(" Key value = " + defaultValue)
setContentView(R.layout.activity_main)
}
fun checklogin(v: View)
{
this.checkLogin2 = this.editTextTextPassword.text.toString()
val castoras = this.getPreferences(MODE_PRIVATE)
val defaultValue2 = castoras.getString("cheie", "ABA")
if(sha256(this.checkLogin2)==defaultValue2.toString())
{
val value: String = this.master // or just your string
val intent = Intent(this, ListAdapter::class.java)
intent.putExtra("value", value)
startActivity(intent)
setContentView(R.layout.activity_main)
}
else {
textView3.text="Incorrect Password"
}
}
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
val castoras = this.getPreferences(MODE_PRIVATE)
val defaultValue2 = castoras.getString("cheie", "key not found")
System.out.println("Abracanabra= "+defaultValue2.toString())
if ((defaultValue2.toString())=="key not found") {
setContentView(R.layout.activitycreate)
}
else {
setContentView((R.layout.activitylogin))
}
}
override fun onSupportNavigateUp(): Boolean {
val navController = findNavController(R.id.fragment)
return navController.navigateUp() || super.onSupportNavigateUp()
}
}
【问题讨论】:
-
ListAdapter 不是 Activity。用它打电话给
startActivity是没有意义的。为什么不直接在 ListAdapter 中创建一个 Activity 可以设置的 String 属性呢?您只需要在不同的活动/服务之间进行通信的意图。
标签: java android-studio kotlin