Android ListView等列表设置空布局
来源:互联网 发布:印度红色走廊 知乎 编辑:程序博客网 时间:2024/05/02 02:33
在Android平台上,listView 是特别常用的组件之一,我们在向用户展示列表数据时,通常要考虑: 列表有数据和无数据空的状态,因为网络环境各异,难免刷新失败什么的;
在此之前我是使用ViewStub来实现,通过判断listview列表数据是否为空来设置ViewStub的隐藏和显示,或者设置lIstview的显示或隐藏;
但是,对ViewStub不是特别的了解,把控不好,只是控制其显示和隐藏,如果对其设置点击刷新数据等交互时,会遇到找不到id等报出NULL的异常;
今天忽然发现一个简单地方法,可以轻松搞定这个小需求.(android listview空布局刷新数据:列表无数据时显示数据加载失败的提示,并且点击提示,刷新数据);
我们来看一下ListView的继承关系,
ListView extends AbsListView
AbsListView extends AdapterView
这个AdapterView抽象类,有一个方法,我们可以很清楚地看到这个方法就是为在列表适配器为空时要显示的View;
Android系统已经为我们写好的方法,我们没有理由不用,也没有必要重复造轮子;拿来直接用
/** * Sets the view to show if the adapter is empty */@android.view.RemotableViewMethodpublic void setEmptyView(View emptyView) { mEmptyView = emptyView; // If not explicitly specified this view is important for accessibility. if (emptyView != null && emptyView.getImportantForAccessibility() == IMPORTANT_FOR_ACCESSIBILITY_AUTO) { emptyView.setImportantForAccessibility(IMPORTANT_FOR_ACCESSIBILITY_YES); } final T adapter = getAdapter(); final boolean empty = ((adapter == null) || adapter.isEmpty()); updateEmptyStatus(empty);}
很简单,我们来看一下Demod的代码片段简单地使用.
@Overrideprotected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); listView = (ListView) findViewById(R.id.listview); textView = (TextView) findViewById(R.id.textView); listView.setEmptyView(textView);//添加引用 adapter = new MyAdapter(); listView.setAdapter(adapter); textView.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { if (adapter.getCount() == 0) { adapter.setCount(1); adapter.notifyDataSetChanged(); } } });}
就是这么简单;
再来看看布局,不论你的布局是不是FrameLayout,都可以做到.listview有数据要显示时,textview不显示.
<?xml version="1.0" encoding="utf-8"?><LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" android:paddingBottom="@dimen/activity_vertical_margin" android:paddingLeft="@dimen/activity_horizontal_margin" android:paddingRight="@dimen/activity_horizontal_margin" android:paddingTop="@dimen/activity_vertical_margin" android:orientation="horizontal" tools:context=".MainActivity"> <ListView android:id="@+id/listview" android:layout_width="wrap_content" android:layout_height="wrap_content" android:descendantFocusability="afterDescendants" android:visibility="gone" android:focusable="true" /> <TextView android:id="@+id/textView" android:layout_width="match_parent" android:layout_height="match_parent" android:gravity="center" android:text="没有数据哦,点我刷新" android:textColor="@android:color/background_dark" android:textSize="14dp" android:textStyle="bold" android:layout_gravity="center" /></LinearLayout>
后记:
空布局需要和listview放同一个布局, 这个点我们看源代码实现方法也是让他们交换显示的参数,而不是添加或者删除组件视图.
小技巧,大用途.
1 0
- Android ListView等列表设置空布局
- Android ListView 加载空布局
- Android Listview设置不同布局
- Android控件ListView自定义列表布局
- android 布局 ListView中的列表 RelativeLayout
- Android——给ListView或者Gridview等设置布局动画
- Android ListView 的布局图标大小设置
- Android之listview为空时显示布局
- Android 开发:(五)初识ListView(列表布局)
- android 处理空listview
- android处理空ListView
- Android 动态设置列表样式,不用ListView或者RecyclerView
- Android为ListView的Item设置不同的布局
- Android为ListView的Item设置不同的布局
- Android为ListView的Item设置不同的布局
- Android为ListView的Item设置不同的布局
- 2014-10-27Android学习------布局处理(五)------ListView布局继续学习-----城市列表应用程序
- 空列表empty listview显示提示信息
- 《C++ primer》英文第五版阅读笔记(十一)——Iterators
- 因为您要求某些软件包保持现状,就是它们破坏了软件包间的依赖关系
- Hadoop与Spark的安装
- 【UML】-九种图之协作图
- 根据进程名称查找进程
- Android ListView等列表设置空布局
- 54. mysqli 扩展库
- Anorm, simple SQL data access
- Mysql函数:Last_insert_id()语法讲解
- C++异步调用Future机制漫谈
- ssh安全配置
- 搜索框制作(笔记)
- C++API设计
- Using "RDP Encoder Mirror Driver" to Capture Screen