单击listVIew中的按钮时获取行信息

时间:2016-05-06 05:13:43

标签: android

我有一个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,但问题是我不知道如何使用特定点击行的参数。

谢谢!

4 个答案:

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

这是最简单的方法,请不要设置对象,如果它太大,我会亲自使用位置并获得该位置的对象。