我如何修复这个重载错误,我有重载分辨率模糊错误,我在我的项目中同步它,清理它并重建它,但它让我bellow错误,我在Kotlin中添加主要活动代码与2布局活动这里是错误x1c 0d1x的照片
这是主要活动.kt
package com.hussein.startup
import android.content.Context
import android.content.Intent
import android.support.v7.app.AppCompatActivity
import android.os.Bundle
import android.view.LayoutInflater
import android.view.View
import android.view.ViewGroup
import android.widget.BaseAdapter
import kotlinx.android.synthetic.main.activity_food_details.view.*
import kotlinx.android.synthetic.main.activity_main.*
import kotlinx.android.synthetic.main.food_ticket.view.*
class MainActivity : AppCompatActivity() {
var adapter:FoodAdapter?=null
var listOfFoods =ArrayList<Food>()
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
// load foods
listOfFoods.add(Food("Coffee"," Coffee preparation is",R.drawable.a))
.....
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, p1: View?, p2: ViewGroup?): View {
val food = this.listOfFood[p0]
var inflator = context!!.getSystemService(Context.LAYOUT_INFLATER_SERVICE) as LayoutInflater
var foodView= inflator.inflate(R.layout.food_ticket,null)
foodView.ivFoodImage.setImageResource(food.image!!)
foodView.ivFoodImage.setOnClickListener {
val intent = Intent(context,FoodDetails::class.java)
intent.putExtra("name",food.name!!)
intent.putExtra("des",food.des!!)
intent.putExtra("image",food.image!!)
context!!.startActivity(intent)
}
foodView.tvName.text = food.name!!
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
}
}
}
这是一个布局xml
1-活动_食物_详细信息.xml
<?xml version="1.0" encoding="utf-8"?>
<android.support.constraint.ConstraintLayout
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".FoodDetails">
<ImageView
android:id="@+id/ivFoodImage"
android:layout_width="50pt"
android:layout_height="50pt"
android:layout_marginTop="52dp"
app:layout_constraintTop_toTopOf="parent"
app:srcCompat="@drawable/c"
app:layout_constraintEnd_toEndOf="parent"
android:layout_marginEnd="8dp"
app:layout_constraintStart_toStartOf="parent"
android:layout_marginStart="8dp"
app:layout_constraintHorizontal_bias="0.501" />
<TextView
android:id="@+id/tvName"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginEnd="8dp"
android:layout_marginStart="8dp"
android:text="TextView"
android:textColor="@color/colorPrimary"
android:textSize="24sp"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintHorizontal_bias="0.501"
app:layout_constraintStart_toStartOf="parent"
android:layout_marginTop="48dp"
app:layout_constraintTop_toBottomOf="@+id/ivFoodImage" />
<TextView
android:id="@+id/tvDetails"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_marginEnd="8dp"
android:layout_marginStart="8dp"
android:layout_marginTop="56dp"
android:text="TextView"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@+id/tvName" />
</android.support.constraint.ConstraintLayout>
2-食品券.xml
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:layout_width="63pt"
android:layout_height="wrap_content"
android:background="@color/gray"
android:orientation="vertical"
android:padding="3pt">
<LinearLayout
android:gravity="center"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="@drawable/background"
android:orientation="vertical">
<ImageView
android:id="@+id/ivFoodImage"
android:layout_width="50pt"
android:layout_height="50pt"
app:srcCompat="@drawable/c" />
<TextView
android:id="@+id/tvName"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:gravity="center"
android:text="Coffe"
android:textSize="20sp" />
</LinearLayout>
</LinearLayout>
6条答案
按热度按时间ss2ws0br1#
您在两个布局中都定义了
ivFoodImage
。并且您导入了它们的定义,如下所示...考虑在其中一个布局中更改名称,或者在
foodView
的定义中显式显示,或者删除activity_food_details
的导入(如果不使用它)。为了阐明可能的解决方案...
1."更改名称"-在您的一个布局中,将ivFoodImage更改为
ivFoodImage_Details
之类的其他名称。1."删除未使用的导入"-不言自明,是一个良好的做法。
1."being explicit"-删除您想要显式加载的对象的导入,然后执行OP正在执行的操作,即
var foodView = inflator.inflate(R.layout.food_ticket,null)
,在本例中显式加载food_ticket
。在多个布局中使用相同名称的概念不错(从接口和注入的Angular 考虑),但是
kotlinx.android.synthetic
是一个语法糖果,可以使事情变得不那么冗长,它阻碍了实现目标。这里还有另一种选择。如果你试图让一个布局实现一种"接口",考虑用它自己的Kotlin类 Package 每个布局,并让该类实现接口。如果你有很多这样的布局,这可能会变得乏味,所以"挑你的毒药",这只是另一种想法。
最后,请看@Daniel Wilson的答案,它避免了编译器错误,并让您指定要使用的
ivFoodImage
的名称空间。t5zmwmid2#
Referencing this answer,您可以专门导入所需的ID并使用Kotlin的
as
关键字对其命名rxztt3cl3#
这意味着java文件中的资源ID未从xml文件正确导入,或者由于名称相同而使用错误的xml资源ID文件导入。
假设
存在具有相同ID的文本视图。
Kotlinimports尝试搜索每个xml文件的id,但是id被错误地导入。
解决方案::复制/粘贴后删除所有导入,并逐个遵循
alt+enter
。nfs0ujit4#
@DanielWilson回答正确。如果您有2个相似的布局,您不需要重命名相同的字段以使它们唯一。
但是你必须一个接一个地导入所有相等的字段并给它们重命名,所以,如果你没有在布局中重命名 *,你应该在代码中重命名它们。
我遇到了Kotlin无法分辨哪个字段对应哪个布局的情况。
奇怪的是,我不能使用
refill_amount
和refill_reason
。然后我使用了旧的Java方法findViewById()
。因此,图片中的一个类变成:zbsbpyhn5#
根据Les的回答,我通常喜欢保持命名约定简单,比如调用RecyclerView的id @+id/recyclerView。如果我有一个名为www.example.com的ActivityExampleActivity.java,布局为R.layout.activity_example,我不想直接导入布局中的每一个视图,我宁愿直接导入布局中的所有视图。
从Activity的布局文件导入所有视图,因为我通常会访问所有视图。如果布局文件包含其他布局,则必须单独导入这些布局。因此,如果使用Activity_example. xml文件中包含的标题布局,则会导入整个布局文件
k2arahey6#
我找到了一个简单的答案
当你复制有布局id的代码时,在导入中我发现
这与我的活动无关,但对你来说
把它拿开。就这样。
您只需确保它与您当前的活动相匹配,这样它就可以正常工作。如果与您的活动不匹配,只需删除它。Android Studio将自动为您导入当前的活动。
而且问题很容易解决。