Autore Topic: Onclick listener per un bottone in una custom listview  (Letto 356 volte)

Offline LonelyWolf

  • Utente junior
  • **
  • Post: 148
  • Respect: +12
    • Mostra profilo
    • Traversate dei laghi
  • Dispositivo Android:
    GT-I9505, ALE-L21
  • Sistema operativo:
    Windows 7 32/64
Onclick listener per un bottone in una custom listview
« il: 05 Novembre 2015, 15:57:53 CET »
0

Dunque una listview con layout custom comprendente delle edittext ed un ImageButton che serve per eliminare l'intero elemento e devo assegnare la funzione di eliminazione.

In sostanza ogni item della listview contiene dei dati che possono essere modificati (semplicemente modificando il contenuto delle edittext) o eliminati alla pressione del bottone; non posso fare riferimento alla posizione dell'item nella listview perchè ogni item viene caricata dal database e potrebbe avere un indice non sequenziale (ad esempio l'elemento in posizione 0 nella listview potrebbe avere un indice 50 nel database).
Ovviamente il layout custom prevede la presenza dell'indice univoco.

Ecco il layout così magari è un po' più chiaro:
Codice: [Seleziona]
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="vertical" android:layout_width="match_parent"
    android:layout_height="match_parent">

    <TextView
        android:id="@+id/indice"
        style="@style/HiddenText" />
    <EditText
        android:id="@+id/numero1_txt"
        android:layout_width="45sp"
        android:layout_height="wrap_content"
        android:maxLines="1"
        android:ems="10"
        android:hint="@string/hint_session_serie"
        android:text="@string/Default_01"
        android:inputType="number" />
    <TextView
        android:id="@+id/sep1"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignBottom="@+id/numero1_txt"
        android:layout_toRightOf="@+id/numero1_txt"
        android:layout_toEndOf="@+id/numero1_txt"
        android:textColor="#FFFFFF"
        android:text="@string/Serie_Separator"
        android:textSize="12sp" />
    <EditText
        android:id="@+id/numero2_txt"
        android:layout_width="45sp"
        android:layout_height="wrap_content"
        android:layout_alignTop="@+id/numero1_txt"
        android:layout_toRightOf="@+id/sep1"
        android:layout_toEndOf="@+id/sep1"
        android:maxLines="1"
        android:ems="10"
        android:hint="@string/hint_session_serie"
        android:text="@string/Default_01"
        android:inputType="number" />
    <TextView
        android:id="@+id/sep2"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignBottom="@+id/numero2_txt"
        android:layout_toRightOf="@+id/numero2_txt"
        android:layout_toEndOf="@+id/numero2_txt"
        android:textColor="#FFFFFF"
        android:text="@string/Serie_Separator"
        android:textSize="12sp" />
    <EditText
        android:id="@+id/distanza_txt"
        android:layout_width="100sp"
        android:layout_height="wrap_content"
        android:layout_alignTop="@+id/numero1_txt"
        android:layout_toRightOf="@+id/sep2"
        android:layout_toEndOf="@+id/sep2"
        android:maxLines="1"
        android:ems="10"
        android:hint="@string/hint_session_dist"
        android:inputType="number" />
    <EditText
        android:id="@+id/ore_txt"
        android:layout_width="45sp"
        android:layout_height="wrap_content"
        android:layout_alignTop="@+id/numero1_txt"
        android:layout_toRightOf="@+id/distanza_txt"
        android:layout_toEndOf="@+id/distanza_txt"
        android:maxLines="1"
        android:ems="10"
        android:hint="@string/Ore"
        android:inputType="number"
        android:maxLength="2"
        android:text="@string/Default_00" />
    <TextView
        android:id="@+id/sep3"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignBottom="@+id/ore_txt"
        android:layout_toRightOf="@+id/ore_txt"
        android:layout_toEndOf="@+id/ore_txt"
        android:textColor="#FFFFFF"
        android:text="@string/Time_Separator"
        android:textSize="12sp" />
    <EditText
        android:id="@+id/min_txt"
        android:layout_width="45sp"
        android:layout_height="wrap_content"
        android:layout_alignTop="@+id/numero1_txt"
        android:layout_toRightOf="@+id/sep3"
        android:layout_toEndOf="@+id/sep3"
        android:maxLines="1"
        android:ems="10"
        android:hint="@string/Minuti"
        android:inputType="number"
        android:maxLength="2"
        android:text="@string/Default_00" />
    <TextView
        android:id="@+id/sep4"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignBottom="@+id/min_txt"
        android:layout_toRightOf="@+id/min_txt"
        android:layout_toEndOf="@+id/min_txt"
        android:textColor="#FFFFFF"
        android:text="@string/Time_Separator"
        android:textSize="12sp" />
    <EditText
        android:id="@+id/sec_txt"
        android:layout_width="45sp"
        android:layout_height="wrap_content"
        android:layout_alignTop="@+id/numero1_txt"
        android:layout_toRightOf="@+id/sep4"
        android:layout_toEndOf="@+id/sep4"
        android:maxLines="1"
        android:ems="10"
        android:hint="@string/Sec"
        android:inputType="number"
        android:maxLength="2"
        android:text="@string/Default_00" />
    <Spinner
        android:id="@+id/spinner_stile"
        android:layout_below="@+id/numero1_txt"
        android:prompt="@string/Stile"
        android:layout_width="match_parent"
        android:layout_height="wrap_content" />
    <ImageButton
        android:contentDescription="@string/del_str"
        android:id="@+id/del_dtl_btn"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignTop="@+id/spinner_stile"
        android:layout_toRightOf="@+id/spinner_stile"
        android:layout_toEndOf="@+id/spinner_stile"
        style="?android:attr/borderlessButtonStyle"
        android:src="@drawable/ic_action_discard" />
</RelativeLayout>

Ora devo assegnare a "del_dtl_btn" un listener alla funzine che recupera "indice" per poterlo eliminare dal database; fino a poco fa non avevo problemi in quanto il tutto avveniva in una activity e nella dichiarazione del layout avevo impostato direttamente la chiamata alla funzione (android:onclick="nome_funzione"), ora il tutto è un fragment non posso più fare in questo modo.

La soluzine migliore per ottenere lo stesso risultato?
Override del metodo getView?
lasciare android:onclick="nome_funzione" e dichiarare la funzione nella (unica) main activity?

In attesa di consigli / suggerimenti.

P.S.
Il layout intero è un po' più complesso, la schermata del fragment è un viewflipper, la listview sta in un LinearLayout nella "seconda schermata"!
Se la mia risposta ti è utile, per favore un thanks!

Offline pietroconti89

  • Utente normale
  • ***
  • Post: 164
  • Respect: +19
    • Mostra profilo
  • Dispositivo Android:
    Galaxy Note 3 N9005
  • Sistema operativo:
    Windows / Mac OSX
Re:Onclick listener per un bottone in una custom listview
« Risposta #1 il: 05 Novembre 2015, 17:25:49 CET »
0
Ciao implementa il customadapter e nel metodo  getView setti alle variabili button il setOnClickListener(...) semplice e indolore  :-P