回答
我做了一些修改,從here拖放列表。當一個項目從列表中移出時,它將被佔據的單元格空間移動,它的高度設置爲1px(請參見第238行),以便它看起來「消失」了。我無法找到一種方法來更好地處理這個問題,因爲將高度設置爲0會失敗,因爲能見度已經降低。
這就是說,如果你真的想暫時擺脫一排,最好改變Adapter
的支持,並且打電話notifyDataSetChanged()
就可以了。
添加到您的ListView對象: 機器人:dividerHeight = 「0像素」 機器人:分隔= 「#FFFFFF」
分頻器膚色並不重要 設置只dividerHeight不起作用
這雖然刪除分隔線...
我看看源代碼。沒有notifyDataSetChanged()
,只有一種方法可以隱藏物品。您必須爲所有內部視圖設置可見性GONE
,並刪除項目視圖的背景圖像和填充。
注意:具有這種不可見元素的行將是可選的。
P.S:這對ExpandableListView
非常有用,如果你想隱藏自己的組視圖。
重新審視一個老問題,但我剛剛遇到了這個問題,我想根據列表數據之外的標準臨時隱藏列表項。我最終做的是在xml中創建一個「空項目」佈局,並根據我的標準返回,而不是getView()中的轉換視圖...
而不是返回convertView,我返回了我的null_item .. 。
return inflater.inflate(R.layout.null_item, null);
null_item.xml:
<?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="wrap_content" >
</LinearLayout>
當涉及到的ListView,使之高效,我們使用ViewHolder模式。該方法使用下面的XML
<?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="wrap_content" >
</LinearLayout>
是getViewTypeCount()和getItemViewType(int position)如下使用的ViewHolder模式和R.layout.row_null。
@Override
public int getViewTypeCount() {
return 2;
}
@Override
public int getItemViewType(int position) {
return (hideStatusCheck(position)) ? 1 : 0;
}
@Override
public View getView(int pos, View convertView, ViewGroup parent) {
View rowView = convertView;
if (hideStatusCheck(pos)) {
if (rowView == null || rowView.getTag() != null) {
LayoutInflater inflater = mActivity.getLayoutInflater();
rowView = inflater.inflate(R.layout.row_null, parent, false);
}
} else {
if (rowView == null) {
rowView = inflateNormalView(parent);
} else if (rowView.getTag() == null) {
rowView = inflateNormalView(parent);
} else {
ViewHolder holderToCheck = (ViewHolder) rowView.getTag();
Integer storedPos = (Integer) holderToCheck.getTag(POSITION);
if (storedPos == null || storedPos != pos)
rowView = inflateNormalView(parent);
}
ViewHolder holder = (ViewHolder) rowView.getTag();
holder.setTag(POSITION,pos);
/*
Populate data
*/
return rowView;
}
private View inflateNormalView(ViewGroup parent) {
View rowView;
LayoutInflater inflater = mActivity.getLayoutInflater();
rowView = inflater.inflate(R.layout.normal_item, parent, false);
ViewHolder viewHolder = new ViewHolder();
assert rowView != null;
/* Initiate normal findViewById thing*/
rowView.setTag(viewHolder);
return rowView;
}
我們做項目的查看類型的檢查,如果它符合隱藏檢查,它將返回1,否則爲0 ListView控件知道會有2種類型查看從getViewTypeCount的。現在,getView將根據hideStatusCheck返回適當的視圖。爲了建立一個健壯的ListView,我們想要使用ViewHolder模式。隱藏時,我們不需要使用ViewHolder。我們只需膨脹R.layout.row_null並將其返回。我們將使用ViewHolder作爲R.layout.normal_item。假設隱藏檢查不是靜態的,這是棘手的部分。 rowView==null
的第一個檢查是標準的。rowView.getTag()==null
的第二項檢查是查看視圖是否會從隱藏回到正常 。最後一個else
子句中的第三個檢查是檢查標記中保留的ViewHolder是否是正確的ViewHolder。如果這些條件得到滿足,我們總是再次誇大觀點。是的,的確,ViewHolder模式並沒有在整個過程中使用,但它用於某些擴展。這總比沒有好。
我覺得我有一個更簡單/更安全的解決方案:您只需將項目「嵌入」到佈局中,並更改此父佈局的可見性。
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="horizontal" >
<!-- Embed ListView Item into a "parent" Layout -->
<LinearLayout
android:id="@+id/parentLayout"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="horizontal" >
<!-- This is the normal content of your ListView Item -->
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Hello" />
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="World" />
</LinearLayout>
</LinearLayout>
在你的代碼
然後就去做:
public View getView(int position, View view, ViewGroup parent) {
if (view == null) {
LayoutInflater li = mActivity.getLayoutInflater();
view = li.inflate(R.layout.my_listview_item, null);
}
LinearLayout parentLayout = (LinearLayout) view.findViewById(R.id.parentLayout);
if (shouldDisplayItem(position)) {
parentLayout.setVisibility(View.VISIBLE);
} else {
parentLayout.setVisibility(View.GONE);
}
return view;
}
這樣,你總是使用/重複使用相同的項目,只是隱藏/顯示它。
這是我準備寫的正確答案:) – 2014-09-03 16:09:50
,如果你想隱藏像這樣的項目:(-1,0)
convertView.setLayoutParams(new AbsListView.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT,1));
convertView.setVisibility(View.GONE);
不能AbsListView.LayoutParams;
如果convertview被重用,你應該添加此下方設置它的高度回:
if(convertView.getVisibility() == View.GONE) {
convertView.setLayoutParams(new AbsListView.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, AbsListView.LayoutParams.WRAP_CONTENT));
convertView.setVisibility(View.VISIBLE);
}
- 1. C++ ListView隱藏項目
- 2. 顯示/隱藏項目 - listview
- 3. 我如何隱藏android中的listview項目?
- 4. Android隱形ListView項目
- 5. 從ListView控件中隱藏項目
- 6. 隱藏第一項ListView中的Android
- 7. 如何隱藏項目?
- 8. 如何隱藏其ListVIew中的項目後點擊NavigationDrawer?
- 9. 如何顯示和隱藏點擊listview項目上的按鈕?
- 10. 如何顯示/隱藏項目點擊ListView ListItem中的RelativeLayout?
- 11. 如何隱藏android listview中每個項目底部的水平線?
- 12. Android隱藏listview滾動條?
- 13. Android Listview隱藏標題欄
- 14. Android ListView隱藏數據
- 15. 如何隱藏.git項目目錄?
- 16. 如何在android中滑動時隱藏/顯示listview項目上的隱藏組件?
- 17. 如何隱藏ListView ColumnHeader?
- 18. 隱藏項目類
- 19. 隱藏TreeView項目
- 20. 隱藏TabBar項目
- 21. 隱藏Android上下文菜單項目
- 22. 動態隱藏項目[隱藏]
- 23. NG隱藏不隱藏所選項目
- 24. 如何隱藏和取消隱藏導航欄項目?
- 25. 如何隱藏UInavigationBar右鍵項目?
- 26. 如何訪問隱藏的RecyclerView項目?
- 27. 如何隱藏標籤欄項目?
- 28. 如何隱藏標籤欄項目?
- 29. 如何隱藏aci樹中的項目
- 30. 如何隱藏欄按鈕項目
你肯定在View.GONE有何評論? – Samuh 2010-04-14 14:33:51
查看http://stackoverflow.com/questions/5041499/how-to-hide-an-item-in-a-listview-in-android – mattlary 2012-02-03 05:28:00