2017-05-19 2 views
3

私のAndroidプロジェクトでは、num_infoとnum_info_packという2つのレイアウトがあります。どちらもid "circle"のビューを持っています。kotlin android extensionsと異なるレイアウトの同じIDを持つビューを参照する

val inetView = activity.layoutInflater.inflate(R.layout.num_info_pack, parent, false) 
    inetView.circle.setBackgroundResource(background) 

しかし、円は赤で下線とそれが言うされています:

オーバーロードの解決の曖昧だから私はlayout_name.circleでこれらのビューを参照しても問題が解決するだろうと思いました。これらの機能はすべて一致します。

public val View.circle:View! で定義されていますkotlinx.android.synthetic.main.num_info_pack.view

public val View.circle:RelativeLayout! kotlinx.android.synthetic.main.num_info_inet_plus_pack.view

で定義されているなぜそれが私が特にinetView.circleを言っている場合、私は話しているサークルについて混乱していますか?

答えて

-1

私は今、手にアンドロイドのスタジオを持っていないが、私は、これはあなたの問題を解決すると思います。私は今、それをテストすることはできませんので、この意志が動作するかどうか

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) 

は知ってはいけません。動作しているかどうか教えてください。

問題は名前の衝突です。インポートエイリアスが役立つと思います。

+0

これは私の現在の解決策です。そのようなケースはかなりあります。多くの輸入品を持っているのはきちんとしていません。また、inetViewは合成オブジェクトkotlinではないので、それはアンドロイドオブジェクトなので、inetView.inetViewCircleは動作しません。 inetViewCircle.setBackground ....が動作します。 – Nazerke

+0

これは面白いです。私はこのanwserを削除します。あなたの質問体にあなたの回避策を追加してもよろしいですか? – glee8e

+0

この回答を残すことができます。これは回避策です。私はちょうどそれを編集しましたので、今すぐOK – Nazerke

-1

すでに非常に良い回答に加えて、プロジェクト内の複数のレイアウトで同じIDを使用している場合、どのIDを選択するかは関係ありません。同様のIDは、定義されているレイアウトに関係なく、同じビューを指しています。だから、あなたは

+0

本当に。なぜこれが下落したのか誰かが気にしていますか? :O –

1

ここに解決策が輸入しているのに役立ちます現在activity/fragment/view

希望のあなたに重要レイアウトのみ(複数可)を残して、他の輸入を破棄することができます。あなたはそれらの1つを削除して、インポートする適切なレイアウトファイルで1を維持

import kotlinx.android.synthetic.main.num_info_pack 

import kotlinx.android.synthetic.main.num_info_inet_plus_pack 

のような2つのレイアウトをインポートする必要があります。それは正常に動作するはずです。

関連する問題