这是我的问题:我有一个包含多行的列表视图。行具有单一类型的listadapter(尽管有几种类型的行)。如果用户选择一行,则需要取消选择另一行。选择行的方式取决于行类型。当在edittext字段中写入某些内容时,会选择某些行等。可以说,行选择算法必须在listadapter类中。
我使用的一个解决方案是在getView()行初始化部分使用“选择”显示算法,当选择一行时,调用notifiy this.notifyDataSetChanged();
刷新整个列表视图。当然,这样做成本太高,导致另外一系列问题。
所以我需要一种方法来从我的自定义适配器类中更新listview中的其他行。如何访问当前选定的行的“兄弟”?
任何输入都将非常感谢!谢谢!
答案 0 :(得分:1)
嗯,我精明的同事,我相信我找到了解决问题的方法:
使用您需要的listView作为自定义适配器的构造函数!
因此,在您的自定义适配器中,您的构造函数将是:
public SubEventListAdapter(Context context, ArrayList<MobileSubEvent> items, MobileSubActivity parentSubActivity, ListView listView)
{
super(context, R.layout.view_select_event_item, items);
this._items = items;
this._context = context;
this.parentSubActivity = parentSubActivity;
this.listView = listView;
}
在您的活动中,您将设置适配器,如下所示:
listView.setAdapter(new SubEventListAdapter(listView.getContext(), subActivity.get_subEventsList(), subActivity, listView));
现在,在您的适配器中,您可以根据需要使用listView;例如:
private void AddAllDots()
{
for(int i = 0 ; i< listView.getChildCount(); i++)
{
View v = listView.getChildAt(i);
ImageView dots = (ImageView) v.findViewById(R.id.ivMandSelection);
dots.setVisibility(View.VISIBLE);
}
}