我有一个ListView,其中包含我从数据库中检索的一些信息。我在列表中正确显示所有信息,并添加了每行中出现的按钮。 当我点击这个按钮时,我需要对该行的特定数据执行一些操作(更改数据库中记录的标志)。
这是我的自定义调整代码:
public class AdapterAprobacion extends ArrayAdapter<Transaccion>{
private LayoutInflater inflater;
public List<Transacciones> Transacciones;
public AdapterAprobacion(Activity activity, List<Transacciones> Transacciones){
super(activity, R.layout.lista_notificaciones, Transacciones);
this.Transacciones=Transacciones;
inflater = activity.getWindow().getLayoutInflater();
}
@Override
public View getView(final int position, View convertView, final ViewGroup parent){
final Transaccion Transacciones= Transacciones.get(position);
convertView=inflater.inflate(R.layout.lista_notificaciones, parent, false);
TextView Header=(TextView)convertView.findViewById(R.id.textTitulo);
Header.setText(Transacciones.getTitle());
ImageView Categoria=(ImageView)convertView.findViewById(R.id.imageProfile);
TextView descripcion=(TextView)convertView.findViewById(R.id.txtDescripcion);
descripcion.setText(Transacciones.getBody());
final ImageButton btnApprove=(ImageButton)convertView.findViewById(R.id.imgApprove);
btnApprove.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
}
});
return convertView;
}
}
我想我必须在getView方法上使用onClickListener,但问题是我不知道如何使用特定点击行的参数。
谢谢!
答案 0 :(得分:1)
您应该使用“viewholder”模式
public View getView(int position, View convertView, ViewGroup viewGroup) {
ViewHolder viewHolder;
if (convertView == null) {
convertView = inflater.inflate(R.layout.lista_notificaciones, parent, false);
viewHolder = new ViewHolder();
viewHolder.btnApprove=(ImageButton)convertView.findViewById(R.id.imgApprove);
btnApprove.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
}
});
convertView.setTag(viewHolder);
} else {
viewHolder = (ViewHolder) convertView.getTag();
}
return convertView;
}
static class ViewHolder {
ImageButton btnApprove;
}
添加到ViewHolder
所需数据
答案 1 :(得分:0)
当你点击相应的按钮时,你可以得到位置,你可以获得行数据。
convertView.btnApprove.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
Toast.makeText(context, position + " clicked" , Toast.LENGTH_LONG).show();
}
});
答案 2 :(得分:0)
您可以将setTag用于按钮。
button.setTag(object);
并在onClick()内部检索标记:
public void onClick(View v) {
Object tag = v.getTag();
}
我要做的是,保存标记中行的行或位置的唯一ID。并在onClick()之后获得唯一的ID /位置。您可以将任何对象保存到Tag,这对于确定onClick()之后的行非常有用。
答案 3 :(得分:0)
您可以btnApprove.setTag( <object/position> )
按钮和onclick:
btnApprove.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
<typecast object/position > = v.getTag();
//perform operation on object/position
}
});
这是最简单的方法,请不要设置对象,如果它太大,我会亲自使用位置并获得该位置的对象。