Android ListView之setEmptyView正確使用方法
Android ListView之setEmptyView正確使用方法
我們知道ListView組件提供了一個空數據是的視圖設置方法setEmptyView,該方法存在一個詬病,就是空視圖和listview組件要在一個Parent中,這個就不在此細說,下面說另一個問題,原因其實和前面那個問題同出一轍。
假如emptyView和listview在布局中,已經屬于同一個parent,設置EmptyView的代碼如下
private void setEmptyView(){
emptyTv.setText(getString(R.string.txt_no_data_refreshable));
mList.setEmptyView(empty);
}
假如沒有數據,運行,一切正常。
下面我們執(zhí)行一句代碼后
mList.setVisibility(View.VISIBLE);
我們發(fā)現,emptyView看不到了,奇怪!
我們來看一下listview的setEmptyView的代碼
public 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);
}
其中重點看updateEmptyStatus的源碼
private void updateEmptyStatus(boolean empty) {
if (isInFilterMode()) {
empty = false;
}
if (empty) {
if (mEmptyView != null) {
mEmptyView.setVisibility(View.VISIBLE);
setVisibility(View.GONE);
} else {
setVisibility(View.VISIBLE);
}
if (mDataChanged) {
this.onLayout(false, mLeft, mTop, mRight, mBottom);
}
} else {
if (mEmptyView != null) mEmptyView.setVisibility(View.GONE);
setVisibility(View.VISIBLE);
}
}
我們發(fā)現,控制emptyView的顯示,就是隱藏listview,這兩個試圖互相隱藏顯示,來達到效果,而且updateEmptyStatus方法只有在listview的setEmptyView時才會執(zhí)行,所以當你執(zhí)行mList.setVisibility(View.VISIBLE)的時候,listview被設置為可見,它覆蓋了emptyView,所以你看不到,如果想顯示emptyView,那就再執(zhí)行一遍setEmptyView方法。
如有疑問請留言或者到本站社區(qū)交流討論,感謝閱讀,希望能幫助到大家,謝謝大家對本站的支持!
相關文章
解析Android開發(fā)優(yōu)化之:從代碼角度進行優(yōu)化的技巧
下面我們就從幾個方面來了解Android開發(fā)過程中的代碼優(yōu)化,需要的朋友參考下2013-05-05
Android解決viewpager嵌套滑動沖突并保留側滑菜單功能
這篇文章主要介紹了 解決viewpager嵌套滑動沖突,并保留側滑菜單功能,非常不錯,具有參考借鑒價值,需要的朋友可以參考下2017-06-06
Handler實現線程之間的通信下載文件動態(tài)更新進度條
每一個線程對應一個消息隊列MessageQueue,實現線程之間的通信,可通過Handler對象將數據裝進Message中,再將消息加入消息隊列,而后線程會依次處理消息隊列中的消息。這篇文章主要介紹了Handler實現線程之間的通信下載文件動態(tài)更新進度條,需要的朋友可以參考下2017-08-08
Android 實現銀聯刷卡機消費后手動簽名的功能(示例代碼)
在一些商場購物時,不需要用筆在銀聯機上簽名了,直接用手指觸摸實現消費簽名,非常方便,下面小編給大家分享Android 實現銀聯刷卡機消費后手動簽名的功能,需要的朋友參考下吧2017-12-12
Android Studio gradle 編譯提示‘default not found’ 解決辦法
這篇文章主要介紹了Android Studio gradle 編譯提示‘default not found’ 解決辦法的相關資料,需要的朋友可以參考下2016-12-12

