在Android ListView中查询根和间接同级视图

时间:2015-11-04 02:22:16

标签: android android-layout

我有ListView来显示文章列表。每个ListView元素都是LinearLayout。在每篇文章中,都有一个TextView按钮来编辑标题(另一个TextView)。但是,按钮和标题不在直接父级之下(实际上不在同一级别)。

示例结构如下所示:

<LinearLayout>
    <LinearLayout
        android:id="@+id/title_zone">
        <TextView
            android:id="@+id/title">
        <ImageView
            android:id="@+id/icon_popularity">
    </LinearLayout><!--end of title_zone-->
    <LinearLayout
        android:id="@+id/content_zone">
        ...
    </LinearLayout><!--end of content_zone-->
    <LinearLayout
        android:id="@+id/button_zone">
        <LinearLayout
            android:id="@+id/author_buttons">
            <TextView
                android:id="@+id/edit_title_button"
                android:onClick="editTitle">
            ...
        </LinearLayout><!--end of author_buttons-->
    </LinearLayout><!--end of button_zone-->
</LinearLayout>

我写了一个SimpleAdapter来将数据应用于视图,因此根LinearLayout将具有文章ID的标记。调用editTitle()时,需要在根目录中找到其父母的父母。输入新标题后,将向服务器发送包含新标题和文章ID的消息。此外,标题文本将在视觉上更改,这意味着我需要根据根目录找到标题TextView

问题是这个查询根进程与UI结构紧密耦合。如果我在XML中更改了结构,我需要注意更改Java中的查询代码。 (如果获得了根,则查询标题视图相对容易。)

是否有更可维护的方式来实现我的目的?

1 个答案:

答案 0 :(得分:0)

行。适用于我的情况的解决方案如下:

在此ListView的自定义简单适配器中,将文章ID设置为edit_title_button标记。并将文章ID组合字符串设置为 root LinearLayout 的标记,例如&#34; a_123 &#34;如果文章ID是 123

因此,当调用editTitle(View v)时,我们可以通过v.getTag()获取故事ID。当然,我们也可以通过其ID获取ListView(例如,ListView list=findViewById(R.id.my_list_view);)。然后,我们可以通过list.findViewWithTag("a_123")简单地获取 root LinearLayout

由于在不知道UI结构的情况下获得 root LinearLayout ,因此以下代码易于维护。