我有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中的查询代码。 (如果获得了根,则查询标题视图相对容易。)
是否有更可维护的方式来实现我的目的?
答案 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 ,因此以下代码易于维护。