Vista de lista personalizada con evento de clic de botón

Me gustaría agregar el evento click en dos botones que están en la vista de lista personalizada. Mi vista de lista personalizada amplía el adaptador base. No sé cómo escribirlo. Ayudame por favor . Aquí está mi código de adaptador: también leo algunas otras publicaciones pero no funcionan para mí.

import java.io.IOException;
import java.io.InputStream;
import java.net.MalformedURLException;
import java.net.URL;
import java.util.ArrayList;
import android.app.Activity;
import android.content.Context;
import android.content.res.Resources;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.media.Image;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import android.widget.ImageButton;
import android.widget.ImageView;
import android.widget.RelativeLayout;
import android.widget.TableRow;
import android.widget.TextView;



public class CustomAdapter extends BaseAdapter    {


private Activity activity;
private ArrayList data;
private static LayoutInflater inflater=null;
public Resources  res;
ListModel getList = null;
int i=0;

public CustomAdapter(Activity a, ArrayList data,Resources resLocal) {

    activity = a;
    this.data = data;
    res = resLocal;
    inflater = (LayoutInflater)activity.getSystemService(Context.LAYOUT_INFLATER_SERVICE);

}

public int getCount() {

    if(data.size() <= 0)
        return 1;
    return data.size();
}

public Object getItem(int position) {
    return position;
}

public long getItemId(int position) {
    return position;
}


public static class ViewHolder{

    public TextView txt_Name;
    public TextView txt_Status;
    public ImageButton imgbtn_senka;
    public ImageButton imgbtn_fuenka;
    public TableRow tblrow_status;
    //public TableRow tblrow_btn;
    public RelativeLayout layoutbtn;
    public ImageView image;


}


public View getView(int position, View convertView, ViewGroup parent) {

    View vi = convertView;
    ViewHolder holder;

    if(convertView==null){

        //Inflate tabitem.xml file for each row
        vi = inflater.inflate(R.layout.tabitem, null);

        holder=new ViewHolder();
        holder.txt_Name = (TextView)vi.findViewById(R.id.txtmemberName);
        holder.txt_Status = (TextView)vi.findViewById(R.id.txtmemberStatus);
        holder.image = (ImageView)vi.findViewById(R.id.imgPlayer);
        holder.imgbtn_fuenka = (ImageButton) vi.findViewById(R.id.btnfusenka);
        holder.imgbtn_senka = (ImageButton) vi.findViewById(R.id.btnsenka);
        holder.tblrow_status = (TableRow)vi.findViewById(R.id.tblrowstatus);
        holder.layoutbtn = (RelativeLayout)vi.findViewById(R.id.layoutbutton);


        vi.setTag(holder);
    }
    else
        holder=(ViewHolder)vi.getTag();

    if(data.size() <= 0){

        holder.txt_Name.setText("No Data");

    }
    else{

        getList = null;
        getList = (ListModel) data.get(position);
        if(getList.getMemberStatus() == 3){


            holder.tblrow_status.setVisibility(View.INVISIBLE);
            holder.layoutbtn.setVisibility(View.VISIBLE);
            if(getList.getEntry() == 0){
                    Log.i("abc", getList.getEntry()+"");
                 //holder.imgbtn_fuenka.setImageResource(res.getIdentifier("com.androidexample.customlistview:drawable/senka.png",null,null));
                holder.imgbtn_senka.setImageResource(R.drawable.fusanka);
                holder.imgbtn_senka.setEnabled(false);
            }

        }

        else{


            holder.tblrow_status.setVisibility(View.VISIBLE);
            holder.layoutbtn.setVisibility(View.INVISIBLE);
            if(getList.getEntry() == 0){
                holder.txt_Status.setText("未確認");
            }
            else if(getList.getEntry() == 1){
                holder.txt_Status.setText("参加");
            }

            else if(getList.getEntry() == 2){
                holder.txt_Status.setText("不参加");
            }
            else if(getList.getEntry() == 3){
                holder.txt_Status.setText("取消");
            }
        }


         holder.txt_Name.setText(getList.getMemberName());
         String url="http://10.0.2.2/football365/Photo/"+getList.getImage();

         try {
            Bitmap bitmap= BitmapFactory.decodeStream((InputStream) new URL(url).getContent());
            holder.image.setImageBitmap(bitmap);
        }
        catch (MalformedURLException e) {

            e.printStackTrace();
        } catch (IOException e) {

            e.printStackTrace();
        }
       //holder.image.setImageResource(res.getIdentifier("http://10.0.2.2/football365/Photo/"+getList.getImage(),null,null));



    }




    return vi;
}



}
0
"Las preguntas que solicitan un código deben demostrar una comprensión mínima del problema que se está resolviendo. Incluya intentos de solución, por qué no funcionaron y los resultados esperados." Así que proporcione más información ...
agregado el autor Amulya Khare, fuente

4 Respuestas

use el siguiente código:

      if(convertView==null){

    //Inflate tabitem.xml file for each row
    vi = inflater.inflate(R.layout.tabitem, null);

    holder=new ViewHolder();
    holder.txt_Name = (TextView)vi.findViewById(R.id.txtmemberName);
    holder.txt_Status = (TextView)vi.findViewById(R.id.txtmemberStatus);
    holder.image = (ImageView)vi.findViewById(R.id.imgPlayer);
    holder.imgbtn_fuenka = (ImageButton) vi.findViewById(R.id.btnfusenka);
    holder.imgbtn_senka = (ImageButton) vi.findViewById(R.id.btnsenka);
    holder.tblrow_status = (TableRow)vi.findViewById(R.id.tblrowstatus);
    holder.layoutbtn = (RelativeLayout)vi.findViewById(R.id.layoutbutton);
   //add this line
    holder.imgbtn_fuenka.setOnClickListener(this);
    holder.imgbtn_senka.setOnClickListener(this);
   //do for how many object that you want


    vi.setTag(holder);
}

y en el método onClick:

    @Override
public void onClick(View v) {
     switch (v.getId())
     {
       case R.id.btnfusenka:

        break;
       case R.id.btnsenka:

         break;
     }

debes importar la línea de seguimiento,

  import View.OnClickListener
0
agregado
El método setOnClickListener (View.OnClickListener) en el tipo View no es aplicable para los argumentos (CustomAdapter). Ese es el error mostrado
agregado el autor user3032822, fuente
¿Implementaste OnClickListener en la clase CustomAdapter?
agregado el autor Shayan Pourvatan, fuente
debe importar la línea de seguimiento, importar View.OnClickListener
agregado el autor Shayan Pourvatan, fuente

Todo lo que necesitas hacer es seguir:

1.En la función getView (), escriba view.onClickListener (supongamos que es un botón) así que escriba

holder.BUTTON_NAME.setON(new View.onClickListener)

            @Override
            public void onClick(View v) {
               //Do your imgbtn_senka buttons stuff  

            }
        });
0
agregado

Agréguelo antes de return de su CustomAdapter's getView() ,

holder.imgbtn_senka.setOnClickListener(new OnClickListener() {

            @Override
            public void onClick(View v) {
               //Do your imgbtn_senka buttons stuff  

            }
        });
0
agregado
Ya probé este. No funciona . Gracias por preocuparse.
agregado el autor user3032822, fuente
Realmente, ¿puedes publicar ese código?
agregado el autor SathishKumar, fuente

Use this code inside getview

 holder.imgbtn_fuenka.setOnClickListener(new OnClickListener() {

        @Override
        public void onClick(View arg0) {

           //write your code here

        }
    });

Use este atributo en la vista de lista.

 android:descendantFocusability="afterDescendants"
0
agregado