Próbuję dodać TextViews
do mojego układu zdefiniowanego w XML w kodzie. Mam arkusz xml, w którym wiele Views
jest zdefiniowanych. Ale muszę dodać kilka widoków w kodzie, więc stwórzmy LinearLayout
w arkuszu xml:
<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="wrap_content"
android:id="@+id/info"
android:layout_height="wrap_content"
android:orientation="vertical">
</LinearLayout>
W tym układzie lubię dodać moje TextView
:
View linearLayout = findViewById(R.id.info);
//LinearLayout layout = (LinearLayout) findViewById(R.id.info);
TextView valueTV = new TextView(this);
valueTV.setText("hallo hallo");
valueTV.setId(5);
valueTV.setLayoutParams(new LayoutParams(
LayoutParams.FILL_PARENT,
LayoutParams.WRAP_CONTENT));
((LinearLayout) linearLayout).addView(valueTV);
Ale pojawia się tylko następujący komunikat o błędzie:
: java.lang.ClassCastException: android.widget.TextView
Jak mogę to zrobić?
Dzięki za pomoc. Jaskółka oknówka
setContentView(R.layout.your_xml_layout);
naprawdę ładuje właściwy plik XML? Czy masz inne układy XML, w których używasz,android:id="@+id/info"
które okazały się być TextView?Odpowiedzi:
spróbuj użyć
upewnij się również, że tworzone parametry układu to LinearLayout.LayoutParams ...
źródło
Hej, sprawdziłem twój kod, nie ma poważnego błędu w twoim kodzie. to jest pełny kod:
main.xml: -
to jest Stackoverflow.java
skopiuj ten kod i uruchom go. jest całkowicie wolny od błędów. dbać...
źródło
<TextView android:id="@+id/tvDInfo3" android:layout_width="0dp" android:layout_height="wrap_content" android:textStyle="bold" android:text="Release Date" android:gravity="center" android:padding="@dimen/dyk_text_pad" android:textColor="#000000" android:textSize="@dimen/info_text_size" android:layout_weight="1" />
TextView
inicjalizacji pozostałych właściwości . Powinno to zostać oznaczone jako odpowiedź.Możesz dodać a
TextView
do swojego układu liniowego programowo w następujący sposób:źródło
MyClass.this
w większości przypadków jest taki sam jakthis
. Musisz jednak podać nazwę klasy, jeśli jesteś w klasie zagnieżdżonej i chcesz uzyskać dostęp do instancji klasy „zewnętrznej”, co jest bardzo częste podczas definiowania wywołań zwrotnych dla zdarzeń w systemie Android.MyClass.this
jest to przypadekMyClass
, i to tylko jeśli kontekst narzędzia MojaKlasa kontekstem (np rozciąga aktywności)źródło
Powinieneś użyć czegoś podobnego do tego, aby dynamicznie dodawać TextView do LinearLayout:
getActivity () jest używana dla wewnętrznych fragmentów, możesz użyć kontekstu lub czegoś podobnego dla każdej instancji, w której się znajdujesz.
źródło
Musisz uzyskać dostęp do układu za pośrednictwem jego zasobu układu, a nie zasobu id, który nie jest gwarantowany jako unikalny. Odwołanie do zasobu powinno wyglądać jak R.layout.my_cool_layout, gdzie powyższy układ XML jest przechowywany w res / layout / my_cool_layout.xml.
źródło
źródło
Oto, gdzie występuje wyjątek
addView
metoda przyjmuje parametr typuView
, a nieTextView
. W związku z tym należy jawnie typecast obiektu valueTv do obiektu View.Dlatego poprawiony kod wyglądałby tak:
źródło