2012-04-23 101 views
1

我已经实现了一个listview(其中每个项目是一个按钮),现在我想通过使用ViewHolder来提高其效率。这是我的问题,我不知道我必须在哪里重写这些按钮的OnClick方法。ViewHolder的实现和使用

这是我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方法必须显示关于选择的项目的一些信息,所以这里是我的问题。 我可以覆盖内

这种方法,如果(convertView == NULL){HERE}

(为了做到这一点只有一次)? 或者相反,在这个IF内部,必须有只涉及膨胀布局的代码行?

回答

0

我会把鉴于支架上的参数定义该行的某些标志(如ID或位置)

集信息之外如果你正在使用(只是之前或之后view.b_opcion.setText(...

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

在onlick监听器中,您可以调用getTag查看,将该对象转换为viewhold呃,然后从查看者处获得你的ID /位置。之后,您可以触及对象并根据您所拥有的数据做任何事情:视图,适配器项目等。

0

你想要它之后,如果陈述。在if语句中,您只会获得对View的UI元素的引用。 if语句,那么你可以进行更改后,设置监听器等