Kotlin中无法访问的可绘制图像名称?
我有一个问题,像访问一个资源(可绘制的名称,而不是它的int ID)
在MainActivity
类中我无法访问var drawableResourceId1
和var drawableResourceId2
这两个if statement
里面的任何解决方案?
注1:我的第一张图片名为“我的Drawable”,第二张图片名为“ b
注2:我使用多个屏幕尺寸来支持Drawable中a
所有尺寸,例如( 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)
您可以在传递Adapter
使用construction
来传递值
所以,如下所述,对您的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 } } }
可能是,帮助你