Android ListView之setEmptyView正確使用方法
我們知道ListView組件提供了一個(gè)空數(shù)據(jù)是的視圖設(shè)置方法setEmptyView,該方法存在一個(gè)詬病,就是空視圖和listview組件要在一個(gè)Parent中,這個(gè)就不在此細(xì)說,下面說另一個(gè)問題,原因其實(shí)和前面那個(gè)問題同出一轍。
假如emptyView和listview在布局中,已經(jīng)屬于同一個(gè)parent,設(shè)置EmptyView的代碼如下
private void setEmptyView(){ emptyTv.setText(getString(R.string.txt_no_data_refreshable)); mList.setEmptyView(empty); } 假如沒有數(shù)據(jù),運(yùn)行,一切正常。
下面我們執(zhí)行一句代碼后
mList.setVisibility(View.VISIBLE);
我們發(fā)現(xiàn),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); } 其中重點(diǎn)看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ā)現(xiàn),控制emptyView的顯示,就是隱藏listview,這兩個(gè)試圖互相隱藏顯示,來達(dá)到效果,而且updateEmptyStatus方法只有在listview的setEmptyView時(shí)才會(huì)執(zhí)行,所以當(dāng)你執(zhí)行mList.setVisibility(View.VISIBLE)的時(shí)候,listview被設(shè)置為可見,它覆蓋了emptyView,所以你看不到,如果想顯示emptyView,那就再執(zhí)行一遍setEmptyView方法。
如有疑問請(qǐng)留言或者到本站社區(qū)交流討論,感謝閱讀,希望能幫助到大家,謝謝大家對(duì)本站的支持!
新聞熱點(diǎn)
疑難解答
圖片精選