ho un layout in cui includo lo stesso sub-layout più volte, ognuna con un ruolo diverso:uso di più <include /> tag nel layout con butterknife
<LinearLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="horizontal">
<include
android:id="@+id/settings_eco_seekarc"
android:layout_width="match_parent"
android:layout_height="match_parent"
layout="@layout/settings_arc" />
<include
android:id="@+id/settings_comfort_seekarc"
android:layout_width="match_parent"
android:layout_height="match_parent"
layout="@layout/settings_arc" />
</LinearLayout>
Funziona se trovo il punto di vista in questo modo:
View eco = root.findViewById(R.id.settings_eco_seekarc);
mEcoSeekArc = (SeekArc) eco.findViewById(R.id.settings_seekarc);
mEcoLeaf = (ImageView) eco.findViewById(R.id.settings_leaf_img);
mEcoText = (TextView) eco.findViewById(R.id.settings_text);
View cmf = root.findViewById(R.id.settings_comfort_seekarc);
mComfortSeekArc = (SeekArc) cmf.findViewById(R.id.settings_seekarc);
mComfortLeaf = (ImageView) cmf.findViewById(R.id.settings_leaf_img);
mComfortText = (TextView) cmf.findViewById(R.id.settings_text);
sto introducendo butterknife nel mio progetto ora, e speravo che potrei semplicemente annotare ogni vista (la seguente, ovviamente, non funziona, e posso capire perché) e iniettare in un secondo momento utilizzando ogni incluso il layout radice:
@InjectView(R.id.settings_seekarc)
SeekArc mEcoSeekArc;
@InjectView(R.id.settings_leaf_img)
ImageView mEcoLeaf;
@InjectView(R.id.settings_text)
TextView mEcoText;
@InjectView(R.id.settings_seekarc)
SeekArc mComfortSeekArc;
@InjectView(R.id.settings_leaf_img)
ImageView mComfortLeaf;
@InjectView(R.id.settings_text)
TextView mComfortText;
//then later...
View eco = root.findViewById(R.id.settings_eco_seekarc);
ButterKnife.inject(this, eco);
View cmf = root.findViewById(R.id.settings_comfort_seekarc);
ButterKnife.inject(this, cmf);
Farlo in questo modo, però, mi porta a questo errore alla seconda iniezione:
Error:(81, 13) error: Attempt to use @InjectView for an already injected ID 2131493185 on 'mEcoSeekArc'.
La mia domanda è: esiste un modo per utilizzare butterknife in questo scenario?
in questo modo sconfigge lo scopo di utilizzare il tag , anche se ... –
Stephan
Sono d'accordo che non è così ideale e automatico come dovrebbe essere, sto solo trovando una soluzione per i vostri problemi. Ma stai ancora scrivendo meno codice, più codice modulare e puoi ancora usare il plug-in ButterKnifeZelezny (https://github.com/avast/android-butterknife-zelezny) per generare automaticamente questo sotto-contenitore. – Budius