2011-11-14 12 views
5

In applicazione Ho un ListActivity che ha un adattatore con TextView e Button (etichetta di eliminazione). Ora voglio rimuovere il pulsante corrispondente elemento cliccato. si prega di controllare il codice e suggerire ???? `come impostareOnclickListener() sul pulsante all'interno di ListView?

public class MySimpleArrayAdapter extends ArrayAdapter<String> implements OnClickListener { 
    private final Activity context; 
    private final String[] names; 
    private Button deleteButton= null; 
    public MySimpleArrayAdapter(Activity context, String[] names) { 
     super (context, R.layout.imagelistlayout, names); 
     this.context = context; 
     this.names = names; 

    } 

    @Override 
    public View getView(int position, View convertView, ViewGroup parent) { 
     LayoutInflater inflater = context.getLayoutInflater(); 
     View rowView = inflater.inflate(R.layout.imagelistlayout, null, true); 
     deleteButton= (Button)rowView.findViewById(R.id.delete_bn); 
     deleteButton.setTag(position); 
     TextView textView = (TextView) rowView.findViewById(R.id.label); 
     textView.setText(names[position]); 
     deleteButton.setOnClickListener(this); 
     return rowView; 

    } 

    @Override 
    public void onClick(View convertView) { 
     System.out.println(deleteButton.getTag()); 

    } 

}` 

mi vogliono sapere come posso eliminare l'elemento il cui pulsante è stato cliccato.

+0

http://stackoverflow.com/questions/1821871/android-how-to-fire-onlistitemclick-in-l pulsanti-in-list istactivity-con- –

+0

http://www.geekmind.net/2009/11/android-custom-list-item-with-nested.html –

risposta

8

solo gestire al clic ascoltatore all'interno GetView dove si trova il pulsante usando findViewById

questo si occuperà il pulsante riga corrente clicca

public class MySimpleArrayAdapter extends ArrayAdapter<String> implements OnClickListener { 
    private final Activity context; 
    private final String[] names; 
    private Button deleteButton= null; 
    public MySimpleArrayAdapter(Activity context, String[] names) { 
     super (context, R.layout.imagelistlayout, names); 
     this.context = context; 
     this.names = names; 

    } 

    @Override 
    public View getView(int position, View convertView, ViewGroup parent) { 
     LayoutInflater inflater = context.getLayoutInflater(); 
     View rowView = inflater.inflate(R.layout.imagelistlayout, null, true); 
     deleteButton= (Button)rowView.findViewById(R.id.delete_bn); 
     deleteButton.setTag(position); 
     TextView textView = (TextView) rowView.findViewById(R.id.label); 
     textView.setText(names[position]); 
     deleteButton.setOnClickListener(new View.OnClickListener() { 

      @Override 
      public void onClick(View arg0) { 
       //try to hide textview or something it may help 
      } 
     }); 
     return rowView; 

    } 

}` 
0
deleteButton.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View arg0) { 
      Log.d("TAG", "position: " + position); 
     } 
    }); 

E la posizione è necessario apportare alla finale getView (posizione finale int, ..., ...) Quando hai la posizione, fai quello che vuoi con esso! Eliminare, modificare o qualsiasi altra cosa ..

+0

System.out.println (deleteButton.getTag()) ; Con questa riga ottengo l'ultimo valore della posizione Supponiamo di avere tre elementi nella mia lista il valore della posizione sarà b 2. – Sandroid

+0

Non usare tag, quello che vuoi è la posizione nella listview in cui hai cliccato il pulsante, giusto? Quindi hai la posizione in getView. Se si desidera eliminare quella riga specifica, eliminarla dall'elenco in cui si invia l'adattatore in quella posizione. Quindi utilizzare il proprio Adapter.notifyDataSetChanged(); – Carnal

0

Molto semplice hai la posizione variabile int in GetView che si riferisce alla voce sulla quale tasto è stato gonfiare in modo da utilizzare variabile grado di eliminare l'elemento su cui si è fatto clic. Basta usare sotto il codice.

@Override 
    public View getView(int position, View convertView, ViewGroup parent) { 
     LayoutInflater inflater = context.getLayoutInflater(); 
     View rowView = inflater.inflate(R.layout.imagelistlayout, null, true); 
     deleteButton= (Button)rowView.findViewById(R.id.delete_bn); 
     deleteButton.setTag(position); 
     TextView textView = (TextView) rowView.findViewById(R.id.label); 
     textView.setText(names[position]); 
     // deleteButton.setOnClickListener(this); 
deleteButton.setOnClickListener(new OnClickListener() 
     { 

      @Override 
      public void onClick(View arg0) { 
       // TODO Auto-generated method stub 
       //use position here 
          // delete the item from data string havng position index and the use notifydataset 
      } 

     }); 
     return rowView; 

    } 
9

Si dovrebbe cercare di non codificare il tuo gestore onclick nel metodo GetView ma guardare a come si assegna un metodo onClick per un controllo ListView. Qui assegni il metodo dall'attività e questo è ciò che dovresti fare anche qui.

In Tu adattatore di creare un metodo chiamato setOnXXXClickListener

public void setOnXXXClickListener(final OnClickListener onClickListener) { 
    this.onXXXClickListener = onClickListener; 
} 

e nel vostro GetView assegnare questo al pulsante mi piace in modo

viewHolder.xxx.setOnClickListener(this.onXXXClickListener); 

Da voi attività è possibile assegnare il metodo onClick come questo

this.adapter.setOnXXXClickListener(new OnClickListener() { 
    @Override 
    public void onClick(View v) { 
     Log.d(TAG, "OnXXXClickListener"); 
    } 
}); 
+0

Ottima risposta se hai bisogno di chiamare qualche funzione non correlata all'adattatore listview! – Leonardo

+0

Come ottenere la posizione con questo approccio? – Sumit

+0

Se avete bisogno della posizione, molto probabilmente userete il setOnItemClickListener. Tuttavia hai sempre la possibilità di impostare setTag sulla vista che assegni il setOnXXXClickListener e quindi estrarre il valore del tag che potrebbe essere la posizione. – slott

Problemi correlati