如何在ListView中处理ViewStub

时间:2012-03-13 19:24:11

标签: android listview viewstub

几天前,我遇到了新的Twitter API(版本3.1.1),我试图复制我在推文列表中看到的效果。

不幸的是我是新用户,我无法发布图片,所以我想解释我在说什么

有推文列表(列表视图),您可以通过longKeyPressed与它们进行交互。 单击后,所选项目将消失,并显示一个新项目。在这个新项目中,有所选推文的可用选项(转发,收藏等...)

我试图复制一下这个功能,但我有几个问题我无法弄清楚。

让我们假设我们使用ViewStub来优化listView,这是行的布局

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="wrap_content" >
<ViewStub
    android:id="@+id/twitter_stub"
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    android:layout_centerVertical="true"
    android:inflatedId="@+id/twitter_actions"
    android:layout="@layout/twitter_swipe_actions" />
<LinearLayout android:id="theOneWhichHasToDisappear">
  .....the row of the listVIew.....
<LinearLayout>  

当我尝试将linearLayout(“theOneWhichHasToDisappear”)的可见性设置为消失时,常常很酷,而且这里是

v.findViewById(R.id.theOneWitchHasToDisappear).setVisibility(View.GONE);
//inflating the stubview
ViewStub stub =  (ViewStub) v.findViewById(R.id.twitter_stub);
View inflated = stub.inflate();

但不幸的是我无法保持物品的正确高度(新的充气后高度不应该改变)。 否则,当我更换列表中的项目时,其他项目会更改!例如,当我点击列表的第一项(第一条推文)时,数字1会改变视图,但数字4,8,12等也会改变!

有谁知道怎么做?谢谢

1 个答案:

答案 0 :(得分:1)

您可以将ViewStub和布局放在一个RelativeLayout上,这样大小就不会改变。

其他项目的更改是关于ListView的视图重用。您必须检查适配器的getView()方法,该方法仅在所选视图上显示存根,而在其他视图上则必须隐藏它。