我需要调用BaseExpandableListAdapter方法
@Override
public View getChildView(int groupPosition, final int childPosition, boolean isLastChild, View convertView, ViewGroup parent)
或类似的东西,以获得该方法返回的视图。问题是,如果我调用该方法,我必须将null传递给convertView,这将重新定义视图,这是我需要的视图。
我需要视图,因为它包含一个自定义视图,其中包含我需要从中检索的代码,而无需将其重置为自身的新实例。以此方法为例:
public ArrayList<CustomViewData> getCustomViewData ()
{
ArrayList<CustomViewData> customViewDatas = new ArrayList<>();
for(int i = 0; i < getGroupCount(); i++)
if(listView.isGroupExpanded(i))
{
View v = //getConvertView
customViewDatas.add((CustomViewData) v.findViewById(R.id.customView);
}
return customViewDatas;
}
如何在不创建新视图的情况下从ExpandableListView(或其基本适配器)获取实际视图?
答案 0 :(得分:0)
永远不要存储Views
生成的getView()
。这是一种非常危险的做法。您有泄漏Views
的风险。此外,适配器会在您滚动时回收Views
,因此您存储的内容无法代表您所需的内容。
你在想错误的方向。适配器将数据绑定到Views
。意思是,View
的呈现方式基于数据本身。如果您因某些事件需要更新其中一个Views
,则必须更新代表该View
的数据。然后,适配器可以相应地重新呈现它View
。
解决此类问题时,请继续告诉自己&#34;如果我需要修改视图,那么我需要修改它的数据。&#34;
答案 1 :(得分:0)
这个问题的解决方案并不容易解决。
无法复制像ArrayAdapter的RecyclerView适配器功能。
相反,如果您需要从未自动存储的自定义视图中获取数据,请覆盖
@Override
public void onViewDetachedFromWindow (ViewHolder holder)
{
//STORE VIEW DATA
super.onViewDetachedFromWindow(holder);
}
@Override
public void onViewRecycled(ViewHolder holder)
{
//STORE VIEW DATA
super.onViewRecycled(holder);
}
使用这些方法从ViewHolder中存储的视图中获取数据。
完成回收站后,您必须从可见视图中获取数据。这些可见视图不会自动回收,因此您必须从仍在适配器上的可见视图中检索视图数据。
要执行此操作,请参阅this发布。