ViewHolder的实现和使用

时间:2012-04-23 12:17:50

标签: android android-layout layout android-inflate

我已经实现了一个listview(每个项目都是一个buttom),现在我想通过使用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){HERE}

(为了做到这一点)? 或者相反,在这个IF中,必须只有引用膨胀布局的代码行?

2 个答案:

答案 0 :(得分:0)

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

答案 1 :(得分:0)

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

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

之前或之后)

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

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