我正在使用带有自定义适配器的ListView来接收JSON响应并将其放入一个很好的列表中 - 效果很好。
我现在正在测试各种异常和错误处理,并在Android应用中捕获从我的网络API收到的错误。这一切都很好,处理得很好 - 但对于我的生活,我无法弄清楚如何设置一次ListView的“空视图”。
它位于片段内,如果这有任何区别 - 但ProgressBar和ListView是在片段中膨胀的XML布局中定义的。我内部还有一个TextView,其中包含一些错误文本 - 我想知道如何为TextView onError()切换ProgressBar!
编辑:目前,ListView使用ProgressBar作为空视图 - 我想知道如何将其更改为另一个视图 - XML定义或编程。
UI线程未被锁定,因为所有API调用都是在AsyncTask上执行的,所以这不是问题。
ListView.removeAllViews()引起了相当迫近的崩溃。
道歉,如果这是微不足道的......
答案 0 :(得分:4)
您可以将空视图定义为FrameLayout,并将您想要的空状态放在该视图中,并将其更改为您更改任何其他视图内容的方式。
答案 1 :(得分:3)
我的ListView有两个空视图。一个是我在从数据库或服务器加载数据时显示的ProgressBar。其他是TextView,我在收到错误或没有数据时显示。
我将我的ListView,ProgressBar和TextView放在FrameLayout中。并将ProgressBar和TextView的可见性设置为Gone。
<FrameLayout
android:layout_width="match_parent"
android:layout_height="0dp"
android:layout_weight="1">
<ListView
android:id="@+id/my_listview"
android:layout_width="match_parent"
android:layout_height="match_parent"/>
<TextView
android:id="@+id/empty_textview"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center"
android:visibility="gone"
android:text="@string/no_contacts_found"/>
<ProgressBar
android:id="@+id/empty_progressbar"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:visibility="gone"
android:layout_gravity="center"
android:indeterminate="true"/>
</FrameLayout>
在从数据库或服务器加载数据之前,我将ProgressBar的可见性更改为Visible,并将其设置为ListView的空视图。所以我的ListView开始显示ProgressBar,表明用户数据仍在加载。
如果我收到错误或没有从数据库或服务器获取数据,我将ProgressBar的可见性设置为Gone并将TextView的可见性更改为Visible。然后将TextView设置为我的ListView的空视图。
答案 2 :(得分:0)
我刚刚在一个旧项目中找到了这个代码,应该可以正常工作:
View emptyView = inflater.inflate(R.layout.id_of_your_layoout_file, parent, false);
getListView.setEmptyView(emptyView);