android从另一行访问listview行
假设我有一个包含3行的listview。如果用户单击第1行中的按钮,它将展开一个菜单(显示/隐藏的只是线性布局)。如果他们单击第2行中的某个项目,我希望能够折叠第1行中的菜单。这可能吗?如果是,如何操作?您可以始终在android从另一行访问listview行,android,listview,Android,Listview,假设我有一个包含3行的listview。如果用户单击第1行中的按钮,它将展开一个菜单(显示/隐藏的只是线性布局)。如果他们单击第2行中的某个项目,我希望能够折叠第1行中的菜单。这可能吗?如果是,如何操作?您可以始终在视图上使用getContext()来获取包含活动的引用,您可以将该活动转换为列表活动(假设您正在使用该活动),并调用常用方法来获取列表适配器中该位置的数据: ((ListActivity) v.getContext()).getListAdapter().getItem(1) 然
视图上使用getContext()
来获取包含活动的引用,您可以将该活动转换为列表活动
(假设您正在使用该活动),并调用常用方法来获取列表适配器中该位置的数据:
((ListActivity) v.getContext()).getListAdapter().getItem(1)
然后,您可以随意操作数据,并在ListAdapter上调用notifyDataSetChanged()
但这可能会让你和你的用户更容易直接使用,这样你就可以用你的用户已经知道的可预测的交互来扩展列表。您可以在中的浏览器源代码中查看“历史记录”活动,以获取真实示例。如果它不能完全满足您的需要,您可以随时从Android源代码中提取ExpandableListView
本身的代码。保存对您以后要操作的视图的引用。可能用final
变量包装,这样就很容易更改。永远不要这样做。在listview中保存对视图的引用将导致出现重大问题。一旦视图离开屏幕,它们就会在内部循环使用,并且试图向它们写入内容在最好的情况下会导致崩溃。事实上,我最终实现了这一点,而且还没那么糟糕。当他们滚动时,我必须将引用设置为null,但这是有效的,因为它只会影响可见的视图。在人们处理ListView的方式中,你犯了一个常见的错误。您试图从行中控制listview,而listview不是为此而构建的。相反,您应该考虑如何将更改通知您的活动,以便它能够处理对listview.CSharperWithJava的更改,您能给出一个代码示例吗?假设您希望在单击第2行中的按钮时修改第1行中文本视图的文本。。。。你会怎么做呢?我希望它能这么简单,不幸的是,可扩展列表视图不能满足我的需要。另外,我没有使用ListActivity。相反,我有一个ListView,它位于一个布局中,然后由一个正常的活动呈现……好吧,您可能应该只使用ListActivity;它只是一个普通活动的简单包装器,可以轻松地跟踪ListView/ListAdapter。但是,如果您出于某种原因不想或不能这样做,您可以在活动中的某个位置保留对ListView/适配器的成员变量引用,也可以这样做(将ListView的ID替换为android.R.ID.ListView):((ListActivity)v.getContext()).findViewById(android.R.ID.ListView).getAdapter().getItem(1)
等。