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

 

看代码学知识之(2) ListView无数据时显示其他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,里面是数组的数据。

  于是,我很好奇这个TextView去了哪里,既然放在同一个FrameLayout中,它难道不是在上层挡着?

  显然,唯一没见过的就是这个TextView的id的属性设置:

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


  搜索了一下,原来这个属性值的作用就是,当ListView关联的Adapter中数据为空时,就显示这个TextView。

   而这个ListView中有数据显示时,这个TextView是不可见的。

 

使用场景1

  上面的布局是一个ListFragment所用的布局中的一块,同理,当Activity继承ListActivity时,可以直接实现。

  即,在布局中直接用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;}}


  这样当数组长度为0时,将自动显示TextView中的内容。而有数据时,显示ListView。

 

使用场景2

  如果选择不继承ListActivity,则上面例子中的TextView,即便id被设置为android:id="@android:id/empty",也不是只有ListView为空时才显示。

  事实上,因为在FrameLayout中,所以这个TextView会一直显示在ListView层之上。

  当ListView无数据时只显示TextView;但是ListView有数据时,仍然显示这个提示“No items”的TextView(which is obviously wrong!)。

  此时这个TextView的显示与否和ListView的数据没有什么关系了。

 

  对于不继承ListActivity的情况,要实现上面的效果应该如何呢?

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

  然后,只需要调用在代码中调用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数据为空时显示另一个View。

 

转载于:https://www.cnblogs.com/mengdd/p/3287662.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/408517.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【原创】推荐广告入门:DeepCTR-Torch,基于深度学习的CTR预测算法库

在计算广告和推荐系统中&#xff0c;CTR预估一直是一个核心问题。无论在工业界还是学术界都是一个热点研究问题&#xff0c;近年来也有若干相关的算法竞赛陆续举办。本文介绍一个使用PyTorch编写的深度学习的点击率预测算法库DeepCTR-Torch&#xff0c;具有简洁易用、模块化和可…

JAVA编程心得-Eclipse/MyEclipse 中文乱码解决办法

将别人的项目或JAVA文件导入到自己的Eclipse中时&#xff0c;常常会出现JAVA文件的中文注释变成乱码的情况&#xff0c;主要原因就是别人的IDE编码格式和自己的Eclipse编码格式不同。 总结网上的建议和自己的体会&#xff0c;可以参考以下几种解决方式&#xff1a; 1 改变整个…

程序员相亲图鉴

程序员&#xff0c;已经渐渐成当代相亲市场的一只主力军。甚至可以说是“香饽饽”。越来越多的妹子&#xff0c;在写择偶要求时&#xff0c;会说对程序员有好感。因为他们&#xff0c;踏实聪明又靠谱&#xff0c;钱多花花肠子少。但关于程序员谈恋爱的“笑点”也不少&#xff0…

delphi XE4 隐藏程序在任务管理器和隐藏任务栏

最新处理方法&#xff0c;偶然发现delphi下有个ShowMainForm属性&#xff0c;只要在Application.Initialize;后面加上Application.ShowMainForm : false;就可以了。 以下的方法不用看了。 隐藏程序在任务管理器&#xff1a;在工程文件中注释掉下面代码&#xff1a;//Applicatio…

推荐几个提高工作效率的神器

推荐几个提高工作效率的神器&#xff0c;只要用到电脑的工作都适用&#xff0c;可以大大提高工作效率。本文所提到的装备经过本人试用&#xff0c;所有价格来自京东网&#xff0c;建议根据自己的经济条件购买装备&#xff08;理论上越贵越好&#xff09;&#xff0c;不建议购买…

判断1个整数的二进制形式的1的个数

int main() {int n;cin >> n;int num 0;while(n){n & (n-1);num;}cout << num <<endl;return 0; }转载于:https://www.cnblogs.com/liuweilinlin/p/3300031.html

终于等到你!GitHub 终于支持 multi-line comments!

今天&#xff08;北京时间 2019 年 10 月 2 日&#xff09;&#xff0c;GitHub CEO Nat Friedman 在 Twitter 发布消息&#xff0c;宣布 GitHub pull request 正式支持 multi-line comments&#xff01;相信一直用 GitHub 进行 PR review 的童鞋&#xff0c;一定对于 GitHub 的…

github标星11600+:最全的吴恩达机器学习课程资源(完整笔记、中英文字幕视频、python作业,提供百度云镜像!)...

吴恩达老师的机器学习课程&#xff0c;可以说是机器学习入门的第一课和最热门课程&#xff0c;我在github开源了吴恩达机器学习个人笔记&#xff0c;用python复现了课程作业&#xff0c;成为热门项目&#xff0c;star数达到11671&#xff0c;曾经有相关报道文章。科学无国界&am…

Oracle 锁表

今天在开发自动预警的时候&#xff0c;发现一个表被锁了&#xff0c;mark 之后细看&#xff1a; "ORA-00054: 资源正忙, 但指定以 NOWAIT 方式获取资源, 或者超时失效"的快速解决方法 今天在导一个临时表的数据&#xff0c;导出完成后准备清空数据&#xff0c;执行tr…

github标星8331+:吴恩达深度学习课程资源(完整笔记、中英文字幕视频、python作业,提供百度云镜像!)...

吴恩达老师的深度学习课程&#xff08;deeplearning.ai&#xff09;&#xff0c;可以说是深度学习入门的最热门课程&#xff0c;我和志愿者编写了这门课的笔记&#xff0c;并在github开源&#xff0c;star数达到8331&#xff0c;曾经有相关报道文章。为解决github下载速度较慢&…

《转》Ubuntu 12.04常用的快捷键

Ubuntu 12.04常用的快捷键超级键操作1、超级键&#xff08;Win键&#xff09;–打开dash。www.2cto.com 2、长按超级键– 启动Launcher。并快捷键列表。3、按住超级键&#xff0c;再按1,2,3等数字键–从Launcher打开一个应用程序&#xff0c;当你按住超级键时&#xff0c;每个…

GitHub上有哪些比较好的计算机视觉/机器视觉的项目?

来源&#xff1a;Unsplash&#xff0c;作者&#xff1a; JR Korpa 来源&#xff1a;知乎问题今天分享一下 Github 上不错的计算机视觉或者机器视觉方面的项目&#xff0c;包括入门的教程、非常经典的算法和实战项目等等。今日推荐文章github标星11600&#xff1a;最全的吴恩达机…

Edittext焦点处理

<LinearLayout android:focusable"true"android:layout_width"0dp"android:layout_height"0dp"android:focusableInTouchMode"true"></LinearLayout> 转载于:https://www.cnblogs.com/LIANQQ/p/3305029.html

20个常用的Python小技巧

2019 年第 73 篇文章&#xff0c;总第 97 篇文章 原题 | 20 Python Snippets You Should Learn Today 作者 | Chaitanya Baweja 原文 | https://medium.com/better-programming/20-python-snippets-you-should-learn-today-8328e26ff124 译者 | kbsc13("算法猿的成长&q…