我在嘗試從listView
中刪除標題時遇到了一些問題。起初我使用addHeaderView()
添加它,但是當我改變到另一個佈局我希望它消失,但removeHeaderView()
不起作用...從列表中刪除標題查看
我也嘗試設置可見性去,它不會消失...
我該怎麼辦?
在此先感謝
我在嘗試從listView
中刪除標題時遇到了一些問題。起初我使用addHeaderView()
添加它,但是當我改變到另一個佈局我希望它消失,但removeHeaderView()
不起作用...從列表中刪除標題查看
我也嘗試設置可見性去,它不會消失...
我該怎麼辦?
在此先感謝
如果您正在使用addHeaderView(),你不能在這之後刪除你的頭。
所以,不要使用addHeaderView()。相反,創建您自己的適配器,將您主要的Views視圖與您的標題混合。雖然我的 MergeAdapter將無法處理您的具體情況,你可以用它來查看 的混合多行源的概念:
試試下述方法..
的Android ListView#addHeaderView
和ListView#addFooterView
方法很奇怪:在設置ListView的適配器之前,必須添加頁眉和頁腳視圖,以便ListView可以考慮頁眉和頁腳 - 否則將會發生異常。在這裏,我們添加一個進度條(微調)作爲headerView:
//微調是一個進度條
listView.addHeaderView(spinner);
我們希望能夠顯示和隱藏微調的意願,但刪除它完全是危險的,因爲我們從來沒有能夠在不破壞ListView中再次添加它 - 記住,我們不能addHeaderView我們已經經過它的適配器:
listView.removeHeaderView(spinner); //dangerous!
讓我們躲吧!結果也很難。只隱藏微調器視圖本身會產生一個空的,但仍然可見的標題區域。
現在試圖隱藏微調:
spinner.setVisibility(View.GONE);
結果:頭區域仍然有一個醜陋的空間可見:
解決的辦法是把進度在LinearLayout中包含它的內容,並隱藏內容。這樣,當它的內容是隱藏的,導致headerView在技術上仍然存在包裝的LinearLayout會崩潰,但0dip高:
<LinearLayout
xmlns:a="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
android:layout_width="fill_parent"
android:layout_height="wrap_content">
<!-- simplified -->
<ProgressBar
android:id="@+id/spinner"
android:layout_width="wrap_content"
android:layout_height="wrap_content"/>
</LinearLayout>
然後,設置佈局的標題:
spinnerLayout = getLayoutInflater().inflate(R.layout.header_view_spinner, null);
listView.addHeaderView(spinnerLayout);
當我們需要隱藏它時,隱藏佈局的內容,而不是佈局:
spinnerLayout.findViewById(R.id.spinner).setVisibility(View.GONE);
現在標題從視圖中消失。頂部沒有更多醜陋的空間!
大多數人不喜歡使用AddHeaderView
,但是我有時會發現它非常方便,避免修改複雜的適配器,或者如果標題與它們不是很相關。
有了這個簡單的技巧,你就能無縫刪除/添加頁眉:
我添加一個空LinearLayout
與orientation vertical
和高度wrap_content
,作爲唯一的標題視圖(讓mListView
是目標listView
) :
LinearLayout mCustomHeaders=new LinearLayout(context);
mCustomHeaders.setOrientation(LinearLayout.VERTICAL);
mListView.addHeaderView(mCustomHeaders);
mListView.setAdapter (.......)
Thenafter,我可以添加隨機的東西,任何地方,以列表的頭,即使在列表已滿:
mCustomHeaders.add(myHeaderView1);
mCustomHeaders.add(myHeaderView2);
mCustomHeaders.add(myHeaderView3);
您還可以刪除所有標頭,隨時隨地:
mCustomHeaders.removeAllViews(); // will erase all headers
你的想法....希望它可以幫助!
這非常有效。 –
哪裏drawerLogoView
是我headerview,這裏是我做的:
drawerLogoView = mInflater.inflate(R.layout.navigation_drawer_custom_layout, null);
mDrawerList.addHeaderView(drawerLogoView,null,false);
LinearLayout layOut = ((LinearLayout)drawerLogoView.findViewById(R.id.NavProfilePreviewLayout));
layOut.setLayoutParams(new RelativeLayout.LayoutParams(RelativeLayout.LayoutParams.MATCH_PARENT, 0));
這樣一來,就變成無形的:d 爲了顯示回來,你可以使用這個:
LinearLayout layOut = ((LinearLayout)drawerLogoView.findViewById(R.id.NavProfilePreviewLayout));
layOut.setLayoutParams(newRelativeLayout.LayoutParams(RelativeLayout.LayoutParams.MATCH_PARENT, RelativeLayout.LayoutParams.WRAP_CONTENT));
我遇到這個問題在一個稍微僞裝的場景中:我所處理的ListView來自PreferenceFragment,並且頭部表示PreferenceCategory。所以,我設置ListView的自由受到嚴重限制。但有兩種方法(部分受到本頁其他答案的啓發)。一種方法是將自定義佈局添加到我的PreferenceCategory中(使用extends android.preference.PreferenceCategory
的類,請參閱Custom PreferenceCategory Headings)。但是,我發現了一個更簡單的解決方法:在這個PreferenceCategory第一選擇,我重寫onCreateView()
:
@Override public View onCreateView(ViewGroup parent) {
parent.setTop(-parent.getChildAt(0).getTop());
return super.onCreateView(parent);
}
的問題是,你總是創建一個新的對象,當你做:
View headerView = someView
所以新的看法是不一樣的已經加入的ListView頭來看,試試這個:
View headerView = inflater.inflate(R.layout.adapter_datatable_saleitem_header, null, false);
headerView.setTag(this.getClass().getSimpleName() + "header");
if (listView.getHeaderViewsCount() > 0) {
View oldView = listView.findViewWithTag(this.getClass().getSimpleName() + "header");
if (oldView != null) {
listView.removeHeaderView(oldView);
}
}
您可以檢查頭計數> 0,則刪除頁眉和重新添加。
它的作品適合我。
View _headerView;
private void function HandleHeaderView(){
if(listView.getHeaderViewsCount() > 0)
{
listView.removeHeaderView(_headerView);
}
/* Add list view header */
_headerView = GetHeaderView();
listView.addHeaderView(_headerView);
}
private View GetHeaderView()
{
View header = getLayoutInflater().inflate(R.layout.header_layout, null);
// TODO: ...
return header
}
可以刪除頭視圖如果你有一個變量指向頭,看到此鏈接:http://stackoverflow.com/a/39286390/1817569 – Hamid