Untuk beberapa alasan, tampilan kosong, dalam hal ini TextView , selalu muncul bahkan saat ListView tidak kosong. Saya pikir ListView akan secara otomatis mendeteksi kapan harus menampilkan tampilan kosong.
<RelativeLayout android:id="@+id/LinearLayoutAR"
android:layout_height="fill_parent"
android:layout_width="fill_parent">
<ListView android:id="@+id/ARListView"
android:layout_width="fill_parent"
android:layout_height="fill_parent"></ListView>
<ProgressBar android:id="@+id/arProgressBar"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_centerHorizontal="true"
android:layout_centerVertical="true"></ProgressBar>
<!-- Here is the view to show if the list is emtpy -->
<TextView android:id="@id/android:empty"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:text="No Results" />
</RelativeLayout>
Bagaimana cara menghubungkan tampilan kosong dengan benar?
Saat Anda memperpanjang
FragmentActivity
atauActivity
dan tidakListActivity
, Anda pasti ingin melihat:ListView.setEmptyView ()
sumber
Seperti yang dikatakan appsthatmatter, dalam tata letak seperti ini:
<ListView android:id="@+id/listView" ... /> <TextView android:id="@+id/emptyElement" ... />
dan di Aktivitas tertaut:
this.listView = (ListView) findViewById(R.id.listView); this.listView.setEmptyView(findViewById(R.id.emptyElement));
Apakah juga bekerja dengan GridView ...
sumber
Saya mencoba semua solusi di atas, saya menemukan pemecahan masalah, di sini saya memposting solusi lengkap.
File xml :
<RelativeLayout android:id="@+id/header_main_page_clist1" android:layout_width="match_parent" android:layout_height="match_parent" android:layout_margin="20dp" android:paddingBottom="10dp" android:background="#ffffff" > <ListView android:id="@+id/lv_msglist" android:layout_width="match_parent" android:layout_height="match_parent" android:divider="@color/divider_color" android:dividerHeight="1dp" /> <TextView android:id="@+id/emptyElement" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_centerInParent="true" android:text="NO MESSAGES AVAILABLE!" android:textColor="#525252" android:textSize="19.0sp" android:visibility="gone" /> </RelativeLayout>
TextView ( "@ + id / emptyElement" ) adalah placeholder untuk tampilan daftar kosong.
Berikut adalah kode untuk halaman java:
Ingatlah untuk menempatkan emptyView setelah mengikat adaptor ke listview.Mine tidak berfungsi untuk pertama kalinya dan setelah saya memindahkan setEmptyView setelah setAdapter, sekarang berfungsi.
Keluaran:
sumber
android:layout_below="@+id/lv_msglist"
untuk emptyElementSaya sangat menyarankan Anda untuk menggunakan ViewStubs seperti ini
<FrameLayout android:layout_width="fill_parent" android:layout_height="0dp" android:layout_weight="1" > <ListView android:id="@android:id/list" android:layout_width="fill_parent" android:layout_height="fill_parent" /> <ViewStub android:id="@android:id/empty" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_gravity="center" android:layout="@layout/empty" /> </FrameLayout>
Lihat contoh lengkap dari Cyril Mottier
sumber
<ListView android:id="@+id/listView" ... /> <TextView android:id="@+id/empty" ... /> and in the linked Activity: this.listView = (ListView) findViewById(R.id.listView); this.listView.setEmptyView(findViewById(R.id.empty));
Ini bekerja dengan jelas dengan FragmentActivity jika Anda menggunakan pustaka dukungan. Menguji ini dengan membangun untuk API 17 yaitu gambar 4.2.2.
sumber
Kode aktivitas, penting untuk diperluas
ListActivity
.package com.example.mylistactivity; import android.app.ListActivity; import android.os.Bundle; import android.widget.ArrayAdapter; import com.example.mylistactivity.R; // It's important to extend ListActivity rather than Activity public class MyListActivity extends ListActivity { @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.mylist); // shows list view String[] values = new String[] { "foo", "bar" }; // shows empty view values = new String[] { }; setListAdapter(new ArrayAdapter<String>( this, android.R.layout.simple_list_item_1, android.R.id.text1, values)); } }
Layout xml, id di kedua tampilan itu penting.
<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:orientation="vertical" android:layout_width="fill_parent" android:layout_height="fill_parent"> <!-- the android:id is important --> <ListView android:id="@android:id/list" android:layout_width="fill_parent" android:layout_height="fill_parent"/> <!-- the android:id is important --> <TextView android:id="@android:id/empty" android:layout_width="fill_parent" android:layout_height="fill_parent" android:text="i am empty"/> </LinearLayout>
sumber
Hanya untuk menambahkan bahwa Anda tidak benar-benar perlu membuat ID baru, sesuatu seperti berikut ini akan berfungsi.
Dalam tata letak:
<ListView android:layout_width="match_parent" android:layout_height="match_parent" android:id="@android:id/list"/> <TextView android:layout_width="match_parent" android:layout_height="wrap_content" android:id="@android:id/empty" android:text="Empty"/>
Kemudian dalam aktivitas:
ListView listView = (ListView) findViewById(android.R.id.list); listView.setEmptyView(findViewById(android.R.id.empty));
sumber
Saya punya masalah ini. Saya harus membuat kelas saya memperluas ListActivity daripada Activity, dan mengganti nama daftar saya di XML menjadi
android:id="@android:id/list"
sumber
Solusi secara terprogram adalah:
TextView textView = new TextView(context); textView.setId(android.R.id.empty); textView.setLayoutParams(new ViewGroup.LayoutParams(ViewGroup.LayoutParams.WRAP_CONTENT, ViewGroup.LayoutParams.WRAP_CONTENT)); textView.setText("No result found"); listView.setEmptyView(textView);
sumber
Pertama periksa daftar berisi beberapa nilai:
if (list.isEmpty()) { listview.setVisibility(View.GONE); }
Jika sudah OK, jika tidak gunakan:
else { listview.setVisibility(View.VISIBLE); }
sumber
list
?