2016-09-02 7 views
0

私のAndroidアプリでは、選択肢を提示するアクティビティのレイアウトがあります。1つのレイアウトのみが表示されているときに共有レイアウト内で共有IDを持つビューにアクセスする

<LinearLayout 
    android:layout_width="match_parent" 
    android:layout_height="wrap_content" 
    android:id="@+id/wrapper" 
    android:orientation="vertical"> 

    <include layout="@layout/choices" /> 

    <include layout="@layout/choice_one" /> 
    <include layout="@layout/choice_two" /> 
</LinearLayout> 

layout/choicesには、2つのボタンがあります。 1つのボタンはlayout/choice_oneを示し、もう1つのボタンはlayout/choice_twoを示します。 (layout/choice_onelayout/choice_two中の親は、最初android:visibility=goneに設定されています。)

をユーザが、基本的に私はVISIBLEに可視性を設定しています、choice_oneまたはchoice_twoのいずれかを選択したとき。それは素晴らしい作品です。

問題は、両方ともchoice_onechoice_twoの中に同じIDの要素を共有していることです。たとえば、ID headerTextViewがあります。 (私はこれらのレイアウトの1つのみが見え、同じものを使用していると考えていたので、これを行いました)

私はButterknifeを使用していて、バインドした場合のように見えます。 choice_oneまたはchoice_two、適切なheader要素のheader.setText("Blah")を正しく呼び出す確率は50/50です。

レイアウトのすべての要素に一意のIDを付けたり、Butterknifeを削除したり、代わりにfindViewByIdを使用してこの問題を回避できると確信しています。しかし、Butterknifeや私の共有レイアウトを捨てることなく、レイアウト内で共有IDをターゲットにできる別の方法はありますか?

答えて

0

私はこれを理解しました。 (。助けたそれを書くので、私はそれにケースの他の誰かつまずくにここでそれをしておこう)の代わりにXMLでincludeを使用して、そこにレイアウトを膨らませるのは、私はちょうど私の2つのレイアウトのためのViewGroupをサブクラス化し、wrapperにそれらを追加しました:

ChoiceOne choiceOne = new ChoiceOne(); 
wrapper.addView(choiceOne); 
関連する問題