从列表适配器内部更新列表视图

时间:2013-08-15 17:54:45

标签: java android listview adapter

这是我的问题:我有一个包含多行的列表视图。行具有单一类型的listadapter(尽管有几种类型的行)。如果用户选择一行,则需要取消选择另一行。选择行的方式取决于行类型。当在edittext字段中写入某些内容时,会选择某些行等。可以说,行选择算法必须在listadapter类中。

我使用的一个解决方案是在getView()行初始化部分使用“选择”显示算法,当选择一行时,调用notifiy this.notifyDataSetChanged();刷新整个列表视图。当然,这样做成本太高,导致另外一系列问题。

所以我需要一种方法来从我的自定义适配器类中更新listview中的其他行。如何访问当前选定的行的“兄弟”?

任何输入都将非常感谢!谢谢!

1 个答案:

答案 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);
        }
    }