Saya mencoba menambahkan TextViews
tata letak yang ditentukan xml dalam kode. Saya memiliki lembar xml, di mana banyak Views
didefinisikan. Tapi saya harus menambahkan beberapa tampilan dalam kode, jadi buat LinearLayout
di lembar 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>
Dan dalam tata letak ini, saya ingin menambahkan 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);
Tapi saya hanya mendapatkan pesan kesalahan berikut:
: java.lang.ClassCastException: android.widget.TextView
Bagaimana saya bisa melakukannya?
Terima kasih atas bantuannya. Martin
setContentView(R.layout.your_xml_layout);
benar-benar memuat xml yang tepat? Apakah Anda memiliki tata letak xml lain di mana Anda menggunakanandroid:id="@+id/info"
yang kebetulan merupakan TextView?Jawaban:
coba gunakan
juga pastikan bahwa tata letak param yang Anda buat adalah LinearLayout.LayoutParams ...
sumber
Hai, saya sudah memeriksa kode Anda, tidak ada kesalahan serius dalam kode Anda. ini adalah kode lengkap:
main.xml: -
ini adalah Stackoverflow.java
salin kode ini, dan jalankan. itu sepenuhnya bebas dari kesalahan. hati hati...
sumber
<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
diinisialisasi. Ini harus ditandai sebagai jawaban.Anda dapat menambahkan
TextView
tata letak linier secara terprogram seperti ini:sumber
MyClass.this
dalam banyak kasus, sama denganthis
. Anda perlu menentukan, bagaimanapun, nama kelas, jika Anda berada di kelas bersarang dan ingin mengakses instance dari kelas "luar", yang sangat umum ketika menentukan panggilan balik untuk acara di android.MyClass.this
adalah turunan dariMyClass
, dan itu hanya akan menjadi konteks jika MyClass mengimplementasikan Konteks (misalnya memperluas Aktivitas)sumber
Anda harus menggunakan sesuatu yang mirip dengan ini untuk menambahkan TextView ke LinearLayout secara dinamis:
getActivity () digunakan untuk di dalam Fragmen, Anda dapat menggunakan konteks atau hal serupa lainnya di setiap instance yang ada di dalam.
sumber
Anda perlu mengakses tata letak melalui sumber daya tata letaknya, bukan sumber daya id yang tidak dijamin unik. Referensi sumber daya akan terlihat seperti R.layout.my_cool_layout tempat tata letak XML di atas disimpan dalam res / layout / my_cool_layout.xml.
sumber
sumber
Di sinilah pengecualian terjadi
addView
Metode mengambil parameter tipeView
, bukanTextView
. Oleh karena itu, ketikkan objek valueTv ke objek Tampilan, secara eksplisit.Karenanya, kode yang diperbaiki adalah:
sumber