この過負荷エラーを修正するにはどうすればいいですか、過負荷解決のあいまいエラーがあります。プロジェクトで同期してクリーンアップして再構築しますが、エラーが表示されます。2つのレイアウトアクティビティを含むKotlinにメインアクティビティコードを追加しますエラー -
ここが主な活動です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-activity_food_details.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-food_ticket.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>
両方のレイアウトでivFoodImage
を定義しています。そして、あなたはそのようにそれらの定義をインポートしています...
_import kotlinx.Android.synthetic.main.activity_food_details.view.*
import kotlinx.Android.synthetic.main.food_ticket.view.*
_
レイアウトの1つで名前を変更するか、foodView
の定義で明示するか、使用されていない場合は_activity_food_details
_でインポートを削除することを検討してください。
[〜#〜]編集[〜#〜]
可能な解決策を明確にするには...
ivFoodImage_Details
_のようなものに変更します。var foodView = inflator.inflate(R.layout.food_ticket,null)
、この場合は_food_ticket
_から明示的にロードします。複数のレイアウトで同じ名前を使用するという概念は悪くありません(インターフェースとインジェクションに関して考えてください)。しかし、_kotlinx.Android.synthetic
_は、物事を冗長にしない構文キャンディです。ここでの目標の邪魔になります。
ここにさらに別の選択肢があります。レイアウトに一種の「インターフェース」を実装させる場合は、各レイアウトを独自のKotlinクラスでラップし、代わりにクラスにインターフェースを実装させることを検討してください。そのようなレイアウトがたくさんある場合、これは退屈になる可能性があるので、「毒を選びなさい」、これは単なる別のアイデアです。
最後に、@ Daniel Wilsonの回答を参照してください。コンパイラエラーを回避し、ivFoodImage
を使用する名前空間を指定します。
この回答を参照 、必要なIDを具体的にインポートし、Kotlinのas
キーワードを使用して名前を付けることができます
package XXX
import kotlinx.Android.synthetic.main.num_info_inet_plus_pack.view.circle as inetViewCircle
import kotlinx.Android.synthetic.main.num_info_pack.view as circle
//...
val inetView = activity.layoutInflater.inflate(R.layout.num_info_pack, parent, false)
inetViewCircle.setBackgroundResource(background)
上記のレの答えに基づいて、私は通常、RecyclerViewのID @ + id/recyclerViewを呼び出すなど、命名規則を単純にしておくのが好きです。レイアウトがR.layout.activity_exampleのExampleActivity.Javaというアクティビティがある場合、そのレイアウトのすべてのビューを直接インポートするのではなく、レイアウトからすべてのビューをインポートします。だから私は単にアクティビティ全体でファイル全体をインポートします:
import kotlinx.Android.synthetic.main.activity_example.*
通常はとにかくすべてのビューにアクセスするため、アクティビティのレイアウトファイルからすべてのビューをインポートします。レイアウトファイルに他のレイアウトが含まれている場合は、それらのレイアウトも個別にインポートする必要があります。したがって、activity_example.xmlファイルに含まれているヘッダーレイアウトを使用する場合、そのレイアウトファイル全体をインポートします
import kotlinx.Android.synthetic.main.header_layout.*
@DanielWilsonの答えは正しいです。 2つの類似したレイアウトがある場合、それらを一意にするために同じフィールドの名前を変更する必要はありません。
ただし、すべての等しいフィールドを1つずつインポートして、名前を変更する必要があります。したがって、in layoutsの名前を変更していない場合は、-in codeに名前を変更します。例えば、
_import kotlinx.Android.synthetic.main.row_profile_balance_refill.amount as refill_amount
import kotlinx.Android.synthetic.main.row_profile_balance_refill.reason as refill_reason
import kotlinx.Android.synthetic.main.row_profile_balance_withdrawal.amount as withdrawal_amount
import kotlinx.Android.synthetic.main.row_profile_balance_withdrawal.reason as withdrawal_reason
_
Kotlinがどのフィールドがどのレイアウトに対応するかを解決できない状況に陥りました。
奇妙ですが、_refill_amount
_と_refill_reason
_は使用できませんでした。次に、古いJavaメソッドfindViewById()
を使用しました。したがって、図のクラスは次のようになります。
_class RefillViewHolder(itemView: View) : AbstractViewHolder(itemView) {
val amount: TextView = itemView.findViewById(R.id.amount)
val reason: TextView = itemView.findViewById(R.id.reason)
}
_
これは、JavaファイルのリソースIDが正しくインポートされないか、同じ名前のために間違ったxmlリソースIDファイルでインポートされることを意味します。
のために
----activity_login
----activity_main
同じIDのテキストビューがあります。
KotlinインポートはすべてのxmlファイルIDを検索しようとし、IDが誤ってインポートされます。
ソリューション ::コピー/貼り付け後にすべてのインポートを削除し、alt+enter
を1つずつ実行します。