2010-07-06 64 views
0

假设我有一个3行的列表视图。如果用户单击第1行中的某个按钮,它将展开一个菜单(这只是显示/隐藏的线性布局)。如果他们然后点击第2行中的项目,我想能够折叠第1行中的菜单。这可能吗?如果是这样,怎么样?android从另一行访问listview行

+0

你在用人们接近listviews的方式犯了一个常见的错误。你试图从行中控制列表视图,这不是listview的目的。相反,您应该考虑如何通知您的更改活动,以便IT部门能够处理对listview的更改。 – CodeFusionMobile 2010-07-06 21:07:50

+0

CSharperWithJava,你能给出一个代码示例吗?假设你想在第2行中的第2行中的按钮被点击时修改第1行中的TextView的文本....你会怎么做? – Ben 2010-07-06 21:44:36

回答

1

保存对您希望稍后操作的视图的引用。可能包装在final变量中,那么你将很容易改变。

+0

永远不要这样做。保存引用到列表视图中的视图将导致您的主要问题。只要屏幕关闭,尝试写入视图就会在内部回收视图,最好是导致崩溃。 – CodeFusionMobile 2010-07-06 21:03:30

+0

是的,CSharperWithjava是正确的...这是一个坏主意...... – Ben 2010-07-06 21:42:18

+0

我说,因为我试过它,它的所有越野车... – Ben 2010-07-06 21:50:46

1

您可以随时使用getContext()View得到一个参考含Activity,您可以转换为ListActivity(假设你正在使用的),并调用常用的方法,在那个位置上获取数据ListAdapter:

((ListActivity) v.getContext()).getListAdapter().getItem(1) 

然后,你可以操纵你的数据。但是你要和你的ListAdapter致电notifyDataSetChanged()

但它很可能是一个很多方便您和您的用户只使用ExpandableListView,它为您提供了可预见的互动用户已经知道了可扩展的列表。您可以在AOSP的浏览器源代码中查看历史活动以获取真实的示例。如果它不完全符合您的需求,您可以随时从Android源代码中抽取ExpandableListView本身的代码。

+0

我希望这很容易,不幸的是可扩展列表视图不会做我需要它。另外,我没有使用ListActivity。相反,我有一个ListView,它是在一个布局中,然后由一个正常的活动渲染... – Ben 2010-07-06 21:46:15

+0

那么,你可能应该只使用ListActivity;它仅仅是一个正常活动的轻量级包装,可以非常轻松地跟踪您的ListView/ListAdapter。但是如果你不想或不能出于某种原因,你可以在你的Activity的某个地方保留一个成员变量引用到你的ListView/Adapter,或者你可以这样做(用你的listview的ID代替android。 ((ListActivity)v.getContext())。findViewById(android.R.id.listview).getAdapter()。getItem(1)' 等 – 2010-07-07 14:38:37