我的布局包含两个ListView(见下图),它们都是使用两个SimpleAdapter创建的;让我们在QLocations ListView和AllLocations ListView底部的ListView上调用ListView。
我想隐藏AllLocations ListView中的所有红色TextView元素。我无法弄清楚如何仅从AllLocations列表视图中隔离TextViews,而不是从QLocations ListView中隔离。
所以,我的问题是,如何隐藏特定ListView中的所有TextView元素?
这是我的代码:
创建ListViews
// Getting qListView: List View for locations with Qs
qLV = (ListView) activity.findViewById(R.id.qListView);
// list adapter
ListAdapter qAdapter = new SimpleAdapter(activity, qListItems,
R.layout.google_places_item,
new String[] { KEY_REFERENCE, KEY_NAME}, new int[] {
R.id.reference, R.id.name });
// Adding data into listview
qLV.setAdapter(qAdapter);
// Getting allListView: List View for locations without Qs
allLV = (ListView) activity.findViewById(R.id.allListView);
// list adapter
ListAdapter allAdapter = new SimpleAdapter(activity, placesListItems,
R.layout.google_places_item,
new String[] { KEY_REFERENCE, KEY_NAME}, new int[] {
R.id.reference, R.id.name });
// Adding data into listview
allLV.setAdapter(allAdapter);
google_places_item.xml
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical" >
<TextView android:id="@+id/reference"
android:visibility="gone"
android:layout_width="fill_parent"
android:layout_height="wrap_content"/>
<!-- Row for each location -->
<LinearLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
android:id="@+id/qLocationRow"
android:orientation="horizontal"
>
<!-- Q Name -->
<TextView android:id="@+id/name"
style="@style/qName"
/>
<!-- Q WaitTime -->
<TextView android:id="@+id/qName.qWaitTime"
style="@style/qName.qWaitTime"
android:text="14"
/>
</LinearLayout>
</LinearLayout>
活动布局
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
style="@style/fullWidth">
<!-- Label for List View of QLocations -->
<TextView
android:id="@+id/qListLabel"
style="@style/widthMargins.Label"
android:text="@string/qListLabel" />
<!-- Horizontal Rule -->
<View
android:id="@+id/horizontalRule1"
style="@style/widthMargins.horizontalRule"
android:layout_below="@+id/qListLabel"
/>
<!-- Linear Layout containing progress bar + text description -->
<LinearLayout
android:layout_width="200dp"
android:layout_height="60dp"
android:id="@+id/lin_progressBar"
android:visibility="visible"
android:layout_centerHorizontal="true"
android:layout_below="@id/horizontalRule1"
android:layout_marginTop="10dp"
android:orientation="horizontal">
<ProgressBar
android:id="@+id/loadPlacesProgress"
style="?android:attr/progressBarStyleLarge"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
/>
<TextView
android:id="@+id/loadPlacesText"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:layout_marginLeft="5dp"
android:text="Loading..."
android:gravity="center_vertical"
android:textSize="15sp"
/>
</LinearLayout>
<!-- ListView for Q Locations -->
<ListView
android:id="@+id/qListView"
style="@style/widthMargins"
android:layout_height="140dp"
android:layout_below="@+id/horizontalRule1" />
<!-- Label for List View of All Locations -->
<TextView
android:id="@+id/allListLabel"
style="@style/widthMargins.Label"
android:layout_below="@+id/qListView"
android:text="@string/allListLabel" />
<!-- Horizontal Rule -->
<View
android:id="@+id/horizontalRule2"
style="@style/widthMargins.horizontalRule"
android:layout_below="@+id/allListLabel"
/>
<!-- Linear Layout containing progress bar + text description -->
<LinearLayout
android:layout_width="200dp"
android:layout_height="60dp"
android:id="@+id/lin_progressBar2"
android:visibility="visible"
android:layout_centerHorizontal="true"
android:layout_below="@id/horizontalRule2"
android:layout_marginTop="10dp"
android:orientation="horizontal">
<ProgressBar
android:id="@+id/loadPlacesProgress2"
style="?android:attr/progressBarStyleLarge"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
/>
<TextView
android:id="@+id/loadPlacesText2"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:layout_marginLeft="5dp"
android:text="Loading..."
android:gravity="center_vertical"
android:textSize="15sp"
/>
</LinearLayout>
<!-- ListView for All Locations -->
<ListView
android:id="@+id/allListView"
style="@style/widthMargins"
android:layout_height="140dp"
android:layout_below="@+id/horizontalRule2"
/>
<!-- Show on Map button -->
<Button android:id="@+id/btn_show_map"
style="@style/fullWidth"
android:layout_centerHorizontal="true"
android:text="Map"
android:padding="20dp"
android:layout_alignParentBottom="true"
android:layout_marginTop="10dip"/>
</RelativeLayout>
答案 0 :(得分:2)
因此,在设置适配器后,您应该能够运行下面的代码以提供所需的效果。我不确定它的效率如何,但它至少应该完成工作。
int numChildren = allLV.getListView().getChildCount();
for(int i = 0; i < numChildren; i++)
{
LinearLayout ll = (LinearLayout) allLV.getListView().getChildAt(i);
TextView tv = (TextView) ll.findViewById(R.id.qName.qWaitTime);
tv.setVisibility(View.INVISIBLE);
}
然后,当您想要显示红色框的文本时,请使用类似的方法将它们再次设置为可见。
答案 1 :(得分:1)
首先要知道列表视图项和数据之间没有1对1的映射。如果您有很多项目,那么当您浏览列表时,视图会被重复使用。
首先,您要更新适配器中的所有项目以获得正确的值。一旦更新了数据。然后通知适配器其数据已更改,它将自行重建adapter.notifyDataSetChanged()
。通过适当缓存数据来快速重建列表。
您可以阅读MVC(模型 - 视图 - 控制器)以更好地了解这里发生的事情。