我有一个带有关联ArrayAdapter的ListView,它在几个活动中显示其内容。不幸的是现在有必要,我的ListView在其中一个设置中不会显示其所有元素,而只是“property”未设置为true的那些元素。我想避免使用两个具有不同内容的ArrayAdapter,因为那时我不知何故需要让它们保持同步。我试过这样的(这个方法现在假设在我们想要隐藏某些元素的设置中调用getView):
public View getView(int position, View convertView, Context context) {
....
if(!arrayitems[position].isProperty()) { //arrayitems is the underlying array
convertView.setVisibility(View.VISIBLE);
}
else {
convertView.setVisibility(View.GONE);
}
return convertView;
}
这很有效,但是如果元素的isProperty == true,我会得到一个白色的行。我想在这个意义上让这行不可见,它不再占用任何空间。这可能吗?
convertView使用的xml文件如下所示:
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:paddingTop="5dp"
android:paddingBottom="5dp"
android:orientation="vertical">
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="horizontal" >
<TextView
android:id="@+id/text_item_time"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginRight="4dp"
android:maxLines="1"
android:ellipsize="none"
android:textSize="12sp"
android:textStyle="bold" />
<TextView
android:id="@+id/text_item_status"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textSize="12sp"
android:textStyle="bold" />
</LinearLayout>
<TextView android:id="@+id/text_item_text"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:textSize="12sp"
android:maxLines="3"
android:ellipsize="none" />
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginTop="2dp"
android:orientation="horizontal" >
<TextView
android:id="@+id/text_item_rating"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginRight="4dp"
android:textSize="10sp" />
<TextView
android:id="@+id/text_item_voted"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textSize="10sp" />
</LinearLayout>
</LinearLayout>
我尝试用“fill_parent”重播所有android:layout_height =“wrap_content”,但它没有改变任何东西......
谢谢!
答案 0 :(得分:9)
将列表视图的所有内容的可见性设置为GONE,然后设置View to Gone的可见性....这将隐藏行而不占用空间.....它对我有效甚至我有一直在寻找这个,但经过一项研究后我发现了这个....
编辑1: 将View的可见性设置为GONE就足够了。无需设置子元素的可见性。
答案 1 :(得分:5)
我遇到了和你一样的问题
我已经通过inflating another layout layout with no height and width
Adapter.java
@Override
public View getView(int position, View convertView, ViewGroup parent) {
// TODO Auto-generated method stub
LayoutInflater inflater = (LayoutInflater) mContext
.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
if (YOUR_CONDITION) {
return inflater.inflate(R.layout.blank_layout, parent,
false);
} else {
View vi = inflater.inflate(R.layout.list_item, parent, false);
return vi;
}
}
空白布局就像这样,
blank_layout.xml
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="0dp"
android:layout_height="0dp"
android:orientation="vertical" >
</LinearLayout>
答案 2 :(得分:4)
所以Romain的意思是为你的LinearLayout添加一个id
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:paddingTop="5dp"
android:paddingBottom="5dp"
android:orientation="vertical"
android:id="@+id/linear_layout">
然后在你的Java中你会做
public View getView(int position, View convertView, Context context) {
....
holder.lLayout = (LinearLayout) convertView.findViewById(R.id.linear_layout);
....
if(!arrayitems[position].isProperty()) { //arrayitems is the underlying array
holder.lLayout.setVisibility(View.VISIBLE);
}
else {
holder.lLayout.setVisibility(View.GONE);
}
return convertView;
}
如果以不同方式夸大您的观点,您可能需要稍微更改一下。我自己做了这件事,效果很好。
答案 3 :(得分:3)
你可以使用android的getview布局:layout_height =“wrap_content”并使用Visibility去隐藏你的布局
答案 4 :(得分:1)
答案 5 :(得分:-2)
通过使用您的逻辑修改getCount()以及getView()中的位置,您可以使其适用于样本Check http://www.sherif.mobi/2012/01/listview-with-ability-to-hide-rows.html @ sherif-elkhatib