日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

看代码学知识之(2) ListView无数据时显示其他View

發(fā)布時間:2023/12/9 编程问答 33 豆豆
生活随笔 收集整理的這篇文章主要介紹了 看代码学知识之(2) ListView无数据时显示其他View 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

?

看代碼學知識之(2) ListView無數(shù)據(jù)時顯示其他View

?

  今天看的一塊布局是這樣的:

<!--The frame layout is here since we will be showing eitherthe empty view or the list view.--><FrameLayoutandroid:layout_width="match_parent"android:layout_height="0dip"android:layout_weight="1" ><!--Here is the list. Since we are using a ListActivity, wehave to call it "@android:id/list" so ListActivity willfind it--><ListViewandroid:id="@android:id/list"android:layout_width="match_parent"android:layout_height="match_parent"android:drawSelectorOnTop="false" /><!-- Here is the view to show if the list is emtpy --><TextViewandroid:id="@android:id/empty"android:layout_width="match_parent"android:layout_height="match_parent"android:text="No items."android:textAppearance="?android:attr/textAppearanceMedium" /></FrameLayout>


  這部分布局實際顯示的效果卻只有一個ListView,里面是數(shù)組的數(shù)據(jù)。

  于是,我很好奇這個TextView去了哪里,既然放在同一個FrameLayout中,它難道不是在上層擋著?

  顯然,唯一沒見過的就是這個TextView的id的屬性設置:

android:id="@android:id/empty"


  搜索了一下,原來這個屬性值的作用就是,當ListView關(guān)聯(lián)的Adapter中數(shù)據(jù)為空時,就顯示這個TextView。

?  而這個ListView中有數(shù)據(jù)顯示時,這個TextView是不可見的。

?

使用場景1

  上面的布局是一個ListFragment所用的布局中的一塊,同理,當Activity繼承ListActivity時,可以直接實現(xiàn)。

  即,在布局中直接用id表達,不需要附加代碼:

<?xml version="1.0" encoding="utf-8"?> <FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"android:layout_width="match_parent"android:layout_height="match_parent" ><ListViewandroid:id="@android:id/list"android:layout_width="match_parent"android:layout_height="match_parent" /><!-- Here is the view to show if the list is emtpy --><TextViewandroid:id="@android:id/empty"android:layout_width="match_parent"android:layout_height="match_parent"android:gravity="center"android:text="No items." /></FrameLayout>

?

?

package com.example.emptylist;import android.os.Bundle; import android.app.Activity; import android.app.ListActivity; import android.view.Menu; import android.widget.ArrayAdapter; import android.widget.ListView;public class MainActivity extends ListActivity {@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);ArrayAdapter<String> adapter = new ArrayAdapter<String>(this,android.R.layout.simple_list_item_1, generateStrings());setListAdapter(adapter);}private String[] generateStrings() {String[] strings = new String[0];for (int i = 0; i < strings.length; ++i) {strings[i] = "String " + i;}return strings;}}


  這樣當數(shù)組長度為0時,將自動顯示TextView中的內(nèi)容。而有數(shù)據(jù)時,顯示ListView。

?

使用場景2

  如果選擇不繼承ListActivity,則上面例子中的TextView,即便id被設置為android:id="@android:id/empty",也不是只有ListView為空時才顯示。

  事實上,因為在FrameLayout中,所以這個TextView會一直顯示在ListView層之上。

  當ListView無數(shù)據(jù)時只顯示TextView;但是ListView有數(shù)據(jù)時,仍然顯示這個提示“No items”的TextView(which is obviously wrong!)。

  此時這個TextView的顯示與否和ListView的數(shù)據(jù)沒有什么關(guān)系了。

?

  對于不繼承ListActivity的情況,要實現(xiàn)上面的效果應該如何呢?

  首先,ListView和TextView的id可以任意設置。

  然后,只需要調(diào)用在代碼中調(diào)用setEmptyView(View?emptyView)設置ListView為空時顯示這個TextView即可。

  布局和代碼如下:

<?xml version="1.0" encoding="utf-8"?> <FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"android:layout_width="match_parent"android:layout_height="match_parent" ><ListViewandroid:id="@+id/myList"android:layout_width="match_parent"android:layout_height="match_parent" /><!-- Here is the view to show if the list is emtpy --><TextViewandroid:id="@+id/myText"android:layout_width="match_parent"android:layout_height="match_parent"android:gravity="center"android:text="No items." /></FrameLayout>

?

Activity:

package com.example.emptylist;import android.os.Bundle; import android.app.Activity; import android.app.ListActivity; import android.view.Menu; import android.widget.ArrayAdapter; import android.widget.ListView;public class MainActivity extends Activity {private ListView mListView = null;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);mListView = (ListView) findViewById(R.id.myList);mListView.setEmptyView(findViewById(R.id.myText));ArrayAdapter<String> adapter = new ArrayAdapter<String>(this,android.R.layout.simple_list_item_1, generateStrings());mListView.setAdapter(adapter);}private String[] generateStrings() {String[] strings = new String[100];for (int i = 0; i < strings.length; ++i) {strings[i] = "String " + i;}return strings;}}

?

?


擴展:

  因為setEmptyView(View?emptyView)這個方法是屬于AdapterView這個類的,所以除了ListView之外,其他的子類,如GridView,Spinner等,應該也可以用這個方法來設置Adapter數(shù)據(jù)為空時顯示另一個View。

?

轉(zhuǎn)載于:https://www.cnblogs.com/mengdd/p/3287662.html

總結(jié)

以上是生活随笔為你收集整理的看代码学知识之(2) ListView无数据时显示其他View的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。