Kotlin:我如何在我的适配器函数访问我的数组?



我正在创建一个应用程序,用户可以在其中添加项目到他们的购物车。一旦用户完成,他们可以点击Proceed To Cart,这将打开一个新的活动,向他们展示购物车的内容。购物车的内容存储在一个数组中,我使用intent将该数组传递给第二个活动。但是不能通过MyCustomAdapterClass访问它

下面是我的代码:
import android.content.Context
import androidx.appcompat.app.AppCompatActivity
import android.os.Bundle
import android.view.LayoutInflater
import android.view.View
import android.view.ViewGroup
import android.widget.BaseAdapter
import android.widget.ListView
import android.widget.TextView
import java.text.FieldPosition
class Cart : AppCompatActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_cart)
val intent = intent
val listview = findViewById<ListView>(R.id.CartItems)
listview.adapter = MyCustomAdapter(this)

}
private inner class MyCustomAdapter(context: Context): BaseAdapter(){
private val mContext: Context
val listOfCartItems = intent.getStringArrayListExtra("CuriseCart")
val sizeOfCart = listOfCartItems?.size
init {
mContext = context
}
override fun getCount(): Int {
return sizeOfCart!!
}
override fun getItemId(position: Int): Long {
return position.toLong()
}
override fun getItem(position: Int): Any {
return "Testing"
}
override fun getView(position: Int, convertView: View?, viewGroup: ViewGroup?): View {
val layoutInflater = LayoutInflater.from(mContext)
val rowFormat = layoutInflater.inflate(R.layout.listview_custom, viewGroup, false)
println("Cart Items"+listOfCartItems)
println("Size of Cart"+sizeOfCart)
val cruiseTitle = rowFormat.findViewById<TextView>(R.id.cruiseTitle)
cruiseTitle.text = listOfCartItems?.get(sizeOfCart!!)
val durationLabel = rowFormat.findViewById<TextView>(R.id.durationLabel)
val numOfTravelers = rowFormat.findViewById<TextView>(R.id.numOfTravelers)
val costOfCruise = rowFormat.findViewById<TextView>(R.id.costOfCruise)

return rowFormat
}

}
}

我想在我打印什么数组列表视图。我做了一些测试,看看是否通过打印到控制台传递了这些值,并且它正确地传递了这些值。

您没有将您的ArrayList传递给您的MyCustomAdapter

你可以让你的MyCustomAdapter类和inner类或者你可以改变MyCustomAdapter的构造器来接受你的ArrayList

为使MyCustomeAdapterinner class,只需添加inner关键字到您的类。

private inner class MyCustomAdapter(context: Context): BaseAdapter() {
//use listOfCardItem in the class
}

或将listOfCardItems添加到MyCustomeAdapter构造函数

private class MyCustomAdapter(context: Context, listOfCartItems: ArrayList<String>): BaseAdapter() {
//use listOfCardItem in the class
}

你不需要在类中手动定义一个属性,并在主构造函数中使用接收到的值初始化它。

你可以用val关键字在主构造函数中定义你的属性,以避免在init块中手工初始化它们。

private class MyCustomAdapter(val context: Context, val listOfCartItems: ArrayList<String>)

解决方案1:-

你可以让你的适配器成为内部类通过像这样在类中添加inner关键字

private inner class MyCustomAdapter(context: Context): BaseAdapter() {//your code}
并在之外创建onCreate

函数。解决方案2:-

只需将列表传递给适配器,如下所示

private class MyCustomAdapter(context: Context, listOfCartItems: ArrayList<YourModel>): BaseAdapter() {//your code}

这两种方法都可以访问你的列表。

最新更新