1

我已经实现了一个列表视图(其中每个项目都是一个按钮),现在我想通过使用 ViewHolder 来提高它的效率。这是我的问题,我不知道我必须在哪里覆盖这些按钮的 OnClick 方法。

这是我的 ArrayAdapter 的 getView:

public View getView(final int position, View convertView, ViewGroup parent) {  
    ViewHolder view;  
    if(convertView==null)  
    {  
        view = new ViewHolder();  
        LayoutInflater inflator = activity.getLayoutInflater();  
        convertView = inflator.inflate(R.layout.layout_opcion, null);  
        view.b_opcion = (Button) convertView.findViewById(R.id.boton_opcion);
        **view.b_opcion.setOnClickListener(new View.OnClickListener() {...});**
        convertView.setTag(view);  
    }  
    else  
    {  
        view = (ViewHolder) convertView.getTag();  
    }
    **view.b_opcion.setOnClickListener(new View.OnClickListener() {...});**
    view.b_opcion.setText(getItem(position));  
    return convertView;  
}  

}

此 OnClick 方法必须显示有关所选项目的一些信息,所以这是我的问题。我可以在里面覆盖这个方法吗

if(convertView==null) {这里}

(为了只做一次)?或者与之相反,在这个 IF 内部必须只有引用膨胀布局的代码行?

4

2 回答 2

0

你想在你的 if 声明之后。在 if 语句中,您只会获得对 View 的 UI 元素的引用。在 if 语句之后,您可以进行更改、设置侦听器等。

于 2012-04-23T13:43:56.687 回答
0

我会在视图持有者中放置一个参数,该参数定义了行的一些标识(例如 ID 或位置)

在您使用的 if 之外设置此信息(就在 view.b_opcion.setText(...

我将定义一个实现 OnClickListener 的侦听器类,并将相同的单个实例附加到第一个 if 语句中的所有视图。

在 onlick 侦听器中,您可以调用 getTag 进行查看,将对象转换为 viewholder,然后从 viewholder 获取您的 id/position。之后,您可以访问该对象并对您拥有的数据执行任何您想要的操作:视图、适配器项等。

于 2012-04-24T08:36:40.290 回答