2012-07-21 28 views
5

Tengo un ListView personalizado que contiene un Button. La función de este botón es el botón Eliminar. Cada vez que el usuario haga clic en este botón, se borrará la fila actual.cómo usar el método onClickListener de Button en un ListView

  • ¿Cómo puedo hacerlo?
  • ¿Cómo puedo configurar onClickListener para este botón?
  • ¿Cómo puedo ver el Id de la fila en el que se encuentra este botón?

Gracias de antemano.

+0

'setOnItemClickListener()' en la vista de lista, si la necesidad de u solamente Identificación fila – MAC

+0

[Ver este Ejemplo] (http://samir-mangroliya.blogspot.in/p/android-customized-listview.html) –

Respuesta

7

En su adapater personalizada de clase getView()

buttonDelete.setOnClickListener(new OnClickListener() 
{ 
    @Override 
    public void onClick(View v) 
    { 
    // Use position parameter of your getView() in this method it will current position of Clicked row button 
    // code for current Row deleted...    
    } 
}); 
+0

¿Qué necesito antes para encontrar ByYd? –

+0

@PaulBrewczynski fuera del curso – sudoman281

1

Utilice esta dentro del método getView de la clase adaptador.

holder.button.setOnClickListener(new OnClickListener() 
{ 
    @Override 
    public void onClick(View v) 
    { 

    } 
}); 
4

En primer lugar, le será muy fácil manejar el clic en este artículo. Solo tiene que agregar un oyente con: myButton.setOnClickListener(mBuyButtonClickListener). Esta acción generalmente se realiza en la implementación getView(...) de su ListView.

Su oyente puede saber cuál es la posición del elemento del botón usando myListView.getPositionForView(myButton). Mira esta muestra del oyente:

private OnClickListener mBuyButtonClickListener = new OnClickListener() { 
    @Override 
    public void onClick(View v) { 
     final int position = getListView().getPositionForView(v); 
     if (position != ListView.INVALID_POSITION) { 
      //DO THE STUFF YOU WANT TO DO WITH THE position 
     } 
    } 
}; 

Cuando se hace esto, usted debe tener problemas para manejar el clic en el objeto mismo y algún que otro toque la propagación de eventos.

Por lo tanto, debe leer this article que describe completamente el uso de múltiples áreas tocables dentro de un ListView. Será de gran ayuda.

1

Miré a todas partes y ninguna de las respuestas me ayudó hasta que lo hizo.

Lo que hice fue crear un HolderView y envuelto todas mis textviews y otros widgets en el mathod getView del adpater:

poner esta clase en:

static class ViewHolder 
{ 
    TextView text1; 
    TextView text2; 
    TextView text3; 
} 

y yo también decalared la misma los normalmente, ya que están separados ahora:

TextView text1; 
TextView text2; 
TextView text3; 

luego declarar todos los puntos de vista y widgets después de inflar el diseño en getView:

holder = new ViewHolder(); 
holder.text1 = (TextView) vi.findViewById(R.id.textView2single); 
holder.text2 = (TextView) vi.findViewById(R.id.textView3single); 
holder.text3 = (TextView) vi.findViewById(R.id.textView4single); 

dentro del método onClick, he utilizado:

View parentView = (View) v.getParent(); 

y refirieron todas mis widgets de nuevo usando este parentview:

text1 = (TextView) parentView.findViewById(R.id.textView2single); 
text2 = (TextView) parentView.findViewById(R.id.textView3single); 
text3 = (TextView) parentView.findViewById(R.id.textView4single); 

Al hacer esto im forzando mi onClick para obtener la matriz posición del elemento de vista de lista, por lo tanto, todos los widgets dentro de ese elemento principal se pueden llamar fácilmente, luego puede hacer lo que quiera con él. Esta es la única forma en que he encontrado que funciona.

0

Crear una vista adaptador lista personalizada, se extienden BaseAdapter e implementar OnClickListener

public class ListAdapter extends BaseAdapter implements OnClickListener {} 

reemplazar el método getView

@Override 
public View getView(int 
     position, View convertView, ViewGroup parent) { 
    // TODO Auto-generated method stub 
    View row = convertView; 
    ViewHolder holder = null; 

    if (row == null) { 
     LayoutInflater inflater = (LayoutInflater) mContext 
       .getSystemService(Context.LAYOUT_INFLATER_SERVICE); 
     row = inflater.inflate(R.layout.list_item, parent, false); 
     holder = new ViewHolder(); 
     holder.b1= (Button) row.findViewById(R.id.b1); 
     b1.setOnClickListener(this); 
    else { 

     holder = (ViewHolder) row.getTag(); 

    } 
} 

ahora reemplazar el método onclick

@Override 
public void onClick(View v) { 
    // TODO Auto-generated method stub 
    switch (v.getId()) { 
     case R.id.b1: 
      //button b1 click event 
      break; 
    } 
} 

public class ViewHolder { 
    Button b1; 
} 
0

Crear una nueva Ver tipo variable a nd asíguelo con currenView (compruebe si iit es nulo). Defina las variables (ImageButton tomado aquí) y establezca viewId de la manera mencionada a continuación.

public View getView(int position, View convertView, ViewGroup parent) { 
     View itemview=convertView; 
     if (itemview==null) 
     { 
      itemview=getLayoutInflater().inflate(R.layout.group_list,parent,false); 

     } 
     final group_contacts currentcontact=g_contact.get(position); 
     ImageButton delete=(ImageButton) itemview.findViewById(R.id.imgbtn_delete); 
     delete.setOnClickListener(new View.OnClickListener() { 
      @Override 
      public void onClick(View v) { 
       //Add your code here to run on tapping button 
      } 
     }); 
     return itemview; 


    } 
0

Para utilizar onClickListener() método en un Button de un ListView, debe aplicar onClickListener() en el botón de Adapter 's getView Methode.

Pero el problema es que no podrá obtener el valor del parámetro position de getView. Para obtener el position del botón que ha tocado, debe llamar al método getPositionForView() en su ListView.

Lets disco con un ejemplo para una mejor comprensión,

  • Considere usted tiene un ListView llamado ExampleListview

  • Un Button en él nombró ExampleButton yu quieren usar onClickListener() en él.

    Examplebutton.setOnClickListener(new OnClickListener() { 
    
          @Override 
          public void onClick(View v) { 
         final int position= ExampleListview..getPositionForView(v); 
        /*Where 'v' is actually the 'View' object Which you are clicking.*/ 
    
    /*you can now right your code her & determine the your desired button by 
        using the position parameter */ 
    } 
    
Cuestiones relacionadas