Недоступное имя изображения в Котлине?

У меня есть проблема с доступом к ресурсу, например ((Drawable по его имени, а не по его int id)

В классе MainActivity я не могу получить доступ к var drawableResourceId1 и var drawableResourceId2 внутри двух if statement , любых решений?

Примечание 1: мое первое изображение с именем a внутри моего Drawable и второе изображение с именем b

Примечание 2: я использую несколько размеров экранов для поддержки всех размеров внутри Drawable для изображений a и b таких как ( ldpi , mdpi , hdpi , xhdpi , xxhdpi , xxxhdpi )

Вот MainActivity.kt

 class MainActivity : AppCompatActivity() { var adapter:FoodAdapter?=null var listOfFoods =ArrayList<Food>() override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) setContentView(layout.activity_main) // load foods listOfFoods.add(Food("Coffee"," Coffee preparation is", a)) listOfFoods.add(Food("Coffee"," Coffee preparation is", b)) var drawableResourceId1 = this.resources.getIdentifier("a", "drawable", this.packageName) var drawableResourceId2 = this.resources.getIdentifier("b", "drawable", this.packageName) adapter= FoodAdapter(this,listOfFoods) gvListFood.adapter =adapter } class FoodAdapter: BaseAdapter { var listOfFood= ArrayList<Food>() var context: Context?=null constructor(context:Context,listOfFood:ArrayList<Food>):super(){ this.context=context this.listOfFood=listOfFood } override fun getView(p0: Int, foodView: View?, p2: ViewGroup?): View? { val food = this.listOfFood[p0] var inflator = context?.getSystemService(Context.LAYOUT_INFLATER_SERVICE) as LayoutInflater var foodView= inflator.inflate(layout.food_ticket, null) foodView.ivFoodImage.setImageResource(food.image) foodView.ivFoodImage.setOnClickListener { val intent = Intent(context, Main2Activity::class.java) if (foodView.ivFoodImage == drawableResourceId1){ intent.putExtra(Main2Activity.EXTRA_ADAPTER_MODE, AdapterType.ADAPTER_TYPE_1.ordinal) intent.putExtra("name", food.name) intent.putExtra("des", food.des) intent.putExtra("image", food.image) context!!.startActivity(intent) } if (foodView.ivFoodImage == drawableResourceId2) { intent.putExtra(Main2Activity.EXTRA_ADAPTER_MODE, AdapterType.ADAPTER_TYPE_2.ordinal) intent.putExtra("name", food.name) intent.putExtra("des", food.des) intent.putExtra("image", food.image) context!!.startActivity(intent) } } return foodView } override fun getItem(p0: Int): Any { return listOfFood[p0] } override fun getItemId(p0: Int): Long { return p0.toLong() } override fun getCount(): Int { return listOfFood.size } } } 

изображение ошибки

Вот класс продуктов питания

 class Food (val name: String, val des: String, val image: Int) 

Вы можете передавать свои значения, используя construction когда вы передаете свой Adapter

Итак, внесите некоторые изменения в класс FoodAdapter, как указано ниже:

 class FoodAdapter: BaseAdapter { var listOfFood= ArrayList<Food>() var context: Context?=null var d1:Int?=null var d2:Int?=null constructor(context:Context,listOfFood:ArrayList<Food>,drawableResourceId1:Int,drawableResourceId2:Int):super(){ this.context=context this.listOfFood=listOfFood this.d1 = drawableResourceId1 this.d2 = drawableResourceId2 } override fun getView(p0: Int, foodView: View?, p2: ViewGroup?): View? { val food = this.listOfFood[p0] var inflator = context?.getSystemService(Context.LAYOUT_INFLATER_SERVICE) as LayoutInflater var foodView= inflator.inflate(layout.food_ticket, null) foodView.ivFoodImage.setImageResource(food.image) foodView.ivFoodImage.setOnClickListener { val intent = Intent(context, Main2Activity::class.java) if (foodView.ivFoodImage == d1){ intent.putExtra(Main2Activity.EXTRA_ADAPTER_MODE, AdapterType.ADAPTER_TYPE_1.ordinal) intent.putExtra("name", food.name) intent.putExtra("des", food.des) intent.putExtra("image", food.image) context!!.startActivity(intent) } if (foodView.ivFoodImage == d2) { intent.putExtra(Main2Activity.EXTRA_ADAPTER_MODE, AdapterType.ADAPTER_TYPE_2.ordinal) intent.putExtra("name", food.name) intent.putExtra("des", food.des) intent.putExtra("image", food.image) context!!.startActivity(intent) } } return foodView } override fun getItem(p0: Int): Any { return listOfFood[p0] } override fun getItemId(p0: Int): Long { return p0.toLong() } override fun getCount(): Int { return listOfFood.size } } } 

Может быть, помогите вам

Intereting Posts
Android FATAL EXCEPTION на android.arch.lifecycle на Kotlin lang Почему мы не можем публиковать типы типов из частных расширенных типов? как я могу преобразовать InputStream в BufferInputStream в kotlin Лучший способ комбинировать целые флаги с использованием Kotlin? kotlin + эспрессо: не найдено никаких действий Android: Как сделать преобразователи типов (для комнаты) универсальными для всех Список объектов в Котлине В Kotlin как передать фрагмент в FragmentManager.replace правильно Что такое типализм в Котлине и как он используется в этой реализации? permissionsdispatcher и несколько @ NeedsPermission с kotlin Как издеваться над реактивным репозиторием, который возвращает Observable Как вводить нестатические, по требованию NativeModules в React Native Android? Котлин: Путаница с лямбдами и дженериками Весна 5 Реактор – Испускающий элемент каждые 1 секунду Как получить доступ к переменной экземпляра в статическом сопутствующем объекте в Koltin Разница между открытыми и переопределяющими методами в Котлине?