android - Kotlin getString 在另一个 Activity/Function 中
问题描述
当我使用这段代码时,我的回收器视图应用程序崩溃了,因为当时我得到了一个空对象引用异常 bt 我不知道如何修复它。我试图对视图文本中的字符串进行软编码,但它不起作用。当我对其进行硬编码时,它可以工作:(问题出在
mContext.getString(R.string.strClick)
这是我的代码:
package de.reuter.myapplication
import android.content.Context
import android.os.Bundle
import androidx.appcompat.app.AppCompatActivity
import androidx.recyclerview.widget.LinearLayoutManager
import de.reuter.timetable.RecycleAdapter
import kotlinx.android.synthetic.main.activity_content_backend.*
class BackendContentActivity : AppCompatActivity()
{
val mContext: Context = this
private val exampleList = generateDummyList(5, this)
private val adapter = RecycleAdapter(exampleList, mContext)
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_content_backend)
recycler_view.adapter = adapter
recycler_view.layoutManager = LinearLayoutManager(this)
recycler_view.setHasFixedSize(true)
}
private fun generateDummyList(size: Int, mContext: Context): ArrayList<AdapterItems> {
val list = ArrayList<AdapterItems>()
var drawable: Int
var txt0: String
var txt1: String
var txt2: String = mContext.getString(R.string.strClick)
for (i in 0 until size) {
when (i % 5) {
0 -> {
drawable = R.drawable.bg_circle_blue
txt0 = "M"
txt1 = "Monday"
}
1 -> {
drawable = R.drawable.bg_circle_green
txt0 = "T"
txt1 = "Tuesday"
}
2 -> {
drawable = R.drawable.bg_circle_red
txt0 = "W"
txt1 = "Wednesay"
}
3 -> {
drawable = R.drawable.bg_circle_yellow
txt0 = "T"
txt1 = "Thursday"
}
4 -> {
drawable = R.drawable.bg_circle_purple
txt0 = "F"
txt1 = "Friday"
}
else -> {
drawable = R.drawable.bg_circle_purple
txt0 = "W"
txt1 = "Wrong"
}
}
var item = AdapterItems(drawable, txt0, txt1, txt2)
list += item
}
return list
}
}
我的回收站适配器:
package de.reuter.timetable
import android.content.Context
import android.content.Intent
import android.view.LayoutInflater
import android.view.View
import android.view.ViewGroup
import android.widget.ImageView
import android.widget.TextView
import androidx.recyclerview.widget.RecyclerView
import com.google.android.material.snackbar.Snackbar
import de.reuter.myapplication.AdapterItems
import de.reuter.myapplication.MondayActivity
import de.reuter.myapplication.R
import kotlinx.android.synthetic.main.card_layout.view.*
class RecycleAdapter(private val exampleList: List<AdapterItems>, context: Context) :
RecyclerView.Adapter<RecycleAdapter.ExampleViewHolder>() {
var mContext = context
override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): ExampleViewHolder {
val itemView = LayoutInflater.from(parent.context).inflate(
R.layout.card_layout,
parent, false
)
return ExampleViewHolder(itemView)
}
override fun onBindViewHolder(holder: ExampleViewHolder, position: Int) {
val currentItem = exampleList[position]
holder.imageView.setImageResource(currentItem.imageResource)
holder.textView0.text = currentItem.text1
holder.textView1.text = currentItem.text2
holder.textView2.text = currentItem.text3
}
override fun getItemCount() = exampleList.size
inner class ExampleViewHolder(itemView: View) : RecyclerView.ViewHolder(itemView) {
var imageView: ImageView = itemView.image_view
var textView0: TextView = itemView.txtShortLetterM
var textView1: TextView = itemView.txtViewMonday
var textView2: TextView = itemView.txtClickLink
init {
imageView = itemView.findViewById(R.id.image_view)
textView0 = itemView.findViewById(R.id.txtShortLetterM)
textView1 = itemView.findViewById(R.id.txtViewMonday)
textView2 = itemView.findViewById(R.id.txtClickLink)
itemView.setOnClickListener { v: View ->
var position: Int = getAdapterPosition()
var text: String
when (position) {
0 -> {
var intent = Intent(mContext, MondayActivity::class.java)
mContext.startActivity(intent)
}
else -> {
text = "Click detected on item $position"
Snackbar.make(
v, text,
Snackbar.LENGTH_LONG
).setAction("Action", null).show()
}
}
}
}
}
}
非常感谢您的帮助
解决方案
尝试将generateDummyList(5, this)
调用移动到类的onCreate
方法BackendContentActivity
:
class BackendContentActivity : AppCompatActivity() {
private lateinit var exampleList: ArrayList<AdapterItems>
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_content_backend)
exampleList = generateDummyList(5, this)
// ...
}
// ...
}
推荐阅读
- python - 加载 TensorFlow 1.11 模型后得到验证损失
- shopware - 什么是 var/plugins.json,它应该进入版本控制(Shopware 6.3.5.2)吗?
- c++ - 使用 OpenGL 4.3,如何正确使用 glVertexAttribFormat/Binding?
- discord.py - 当我尝试向不和谐频道发送消息时,它会重复该消息
- java - 从 Java 8 移植到 11:com.sun.xml.internal.messaging.saaj.soap.SAAJMetaFactoryImpl 未找到,如何更改实现?
- php - Magento 2:分组产品 - 将 QTY 字段更改为下拉列表
- python - 诗歌后端安装包失败
- r - 在嵌套 tibbles 的 tibble 中(在 list-columns 内),如何更新 tibbles 以重命名具有通用名称的列?
- c# - 不要在 CollectionView 中显示特定组的 DataTemplate
- eslint - Vim ESLint 尚未批准或拒绝