Autore Topic: Recupero ID di un button creato a runtime  (Letto 277 volte)

Offline maurizio76

  • Nuovo arrivato
  • *
  • Post: 14
  • Respect: +2
    • Mostra profilo
Recupero ID di un button creato a runtime
« il: 05 Ottobre 2016, 17:13:40 CEST »
0
Ciao a tutti
sto creando dinamicamente, a runtime, una serie di pulsanti/button in un LinearLayout
Voglio associare a ciascun Button un ID ,che per me è una chiave univoca per risalire ad un certo codice prodotto
Es.
Button 1 ---> ID=34
Button 2 ---> ID=139
Button 3 ---> ID=234

In un  ArrayList<String>  di nome "listaCodici" ho la lista di questi codici prodotto
Ho quindi
listaCodici[0]--->34
listaCodici[1]--->139
listaCodici[2]--->234


Il codice che uso,ad es. per creare 10 pulsanti è il seguente:

Codice (Java): [Seleziona]
 for (int j = 0; j < 10; j++)
{
   Button myButton = new Button(this);
   myButton.setLayoutParams(new LinearLayout.LayoutParams(LinearLayout.LayoutParams.FILL_PARENT, LinearLayout.LayoutParams.WRAP_CONTENT));
   myButton.setText("myButton");
   myButton.setGravity(0);
   myButton.setId(listaCodici.get(j).toString());//imposto il codice prodotto come ID
   myButton.setOnClickListener(new View.OnClickListener() {
           public void onClick(View view) {
              int idButton =((Button)view).getId();
           int idButton_2=view.getId();
                             visualizzaMessaggio("Info", "Hai selezionato il prodotto con codice:" + idButton ); 
                      }
                  });
}
Codice (Java): [Seleziona]
 
Il problema è che non riesco a recuperare il codice Prodotto  salvato tramite setID e associato al pulsante
Ovvero al Click del pulsante vorrei risalire all'ID del pulsante cliccato, mentre con le istruzioni seguenti  recupero
solo la posizione del pulsante:
  int idButton =((Button)view).getId();
  int idButton_2=view.getId();


Cioè se l'utente preme sul 1°pulsante visualizzo "Hai selezionato il prodotto con codice:1"
Se l'utente preme sul 2°pulsante visualizzo "Hai selezionato il prodotto con codice:2"
Cioè se l'utente preme sul 13°pulsante visualizzo "Hai selezionato il prodotto con codice:13"

Io vorrei invece che l'utente preme sul 1° pulsante appaia ad es.:
"Hai selezionato il prodotto con codice:34"

Dove sbaglio?Qualcuno può aiutarmi?

P.S. vorrei evitare di salvare i codici in un altro arraylist e in base alla posizione risalire al codice prodotto

« Ultima modifica: 05 Ottobre 2016, 18:53:17 CEST da maurizio76 »

Offline Ohmnibus

  • Utente senior
  • ****
  • Post: 580
  • Respect: +130
    • Google+
    • @ohmnibus
    • Mostra profilo
    • Lords of Knowledge GdR
  • Dispositivo Android:
    Samsung Galaxy Nexus
  • Play Store ID:
    Ohmnibus
  • Sistema operativo:
    Windows 7 x64
Re:Recupero ID di un button creato a runtime
« Risposta #1 il: 06 Ottobre 2016, 10:52:15 CEST »
0
Prima di risponderti vorrei sapere perché non usi un ListView
Ohmnibus
Le mie app su Play Store

È stata trovata una soluzione al tuo problema? Evidenzia il post più utile premendo . È un ottimo modo per ringraziare chi ti ha aiutato.

Offline maurizio76

  • Nuovo arrivato
  • *
  • Post: 14
  • Respect: +2
    • Mostra profilo
Re:Recupero ID di un button creato a runtime
« Risposta #2 il: 06 Ottobre 2016, 11:51:44 CEST »
0
Ciao Ohmnibus
intendi che dovrei usare un ListView al posto dei pulsanti/button ?
In realtà non ci avevo pensato.
Posso quindi sempre aggiungere gli elementi dinamicamente visto che non ne conosco a priori il loro numero....




Offline Ohmnibus

  • Utente senior
  • ****
  • Post: 580
  • Respect: +130
    • Google+
    • @ohmnibus
    • Mostra profilo
    • Lords of Knowledge GdR
  • Dispositivo Android:
    Samsung Galaxy Nexus
  • Play Store ID:
    Ohmnibus
  • Sistema operativo:
    Windows 7 x64
Re:Recupero ID di un button creato a runtime
« Risposta #3 il: 06 Ottobre 2016, 13:13:26 CEST »
0
Lo scopo del ListView è proprio quello di avere di fatto un LinearLayout con un numero variabile di elementi.

E sì, puoi aggiungere gli elementi dinamicamente, in vari modi.
Ohmnibus
Le mie app su Play Store

È stata trovata una soluzione al tuo problema? Evidenzia il post più utile premendo . È un ottimo modo per ringraziare chi ti ha aiutato.

Offline maurizio76

  • Nuovo arrivato
  • *
  • Post: 14
  • Respect: +2
    • Mostra profilo
Re:Recupero ID di un button creato a runtime
« Risposta #4 il: 06 Ottobre 2016, 16:22:39 CEST »
0
OK,appena posso faccio una prova e ti aggiorno
Grazie  ;-)

Offline maurizio76

  • Nuovo arrivato
  • *
  • Post: 14
  • Respect: +2
    • Mostra profilo
Re:Recupero ID di un button creato a runtime
« Risposta #5 il: 10 Ottobre 2016, 10:49:29 CEST »
0
La listview è un ottima alternativa,ma come faccio ad associare ad ogni elemento un ID e a recuperarlo quando si seleziona ? (ovvero all'onclick)

Io uso istruzioni del tipo
Codice (Java): [Seleziona]
List values = new ArrayList();//ArrayList di stringhe con i valori visualizzati
 ArrayAdapter<String> adapter = new ArrayAdapter<String>(this,android.R.layout.simple_list_item_1, values);
        myListView.setAdapter(adapter);

Devo sempre salvare gli ID in una struttura dati esterna e in base alla posizione dell'elemento scelto dall'utente risalire all'ID? Esiste una soluzione "semplice/immediata"  alternativa?


« Ultima modifica: 10 Ottobre 2016, 11:26:21 CEST da maurizio76 »

Offline Ohmnibus

  • Utente senior
  • ****
  • Post: 580
  • Respect: +130
    • Google+
    • @ohmnibus
    • Mostra profilo
    • Lords of Knowledge GdR
  • Dispositivo Android:
    Samsung Galaxy Nexus
  • Play Store ID:
    Ohmnibus
  • Sistema operativo:
    Windows 7 x64
Re:Recupero ID di un button creato a runtime
« Risposta #6 il: 10 Ottobre 2016, 12:04:33 CEST »
0
Hai molti modi per associare un ID ad un valore.
La soluzione più semplice che mi viene in mente è quella che hai sugerito: due array, uno con i testi ed uno con gli ID, in base alla posizione restituita dal listview ricavi l'ID accedendo al secondo array.

In alternativa puoi realizzare una classe che contiene tutti i tuoi dati:

Codice (Java): [Seleziona]
public class DataContainer {
  public String testo;
  public long ID;

  @Override
  public String toString() {
    //Questo metodo deve restituire quello che
    //deve apparire nel ListView
    return testo;
  }
}

A questo punto puoi creare un ArrayAdapter di DataContainer ed avere sia testo che ID in un unico array.

Un ulteriore passo consiste nell'estendere la classe ArrayAdapter:

Codice (Java): [Seleziona]
public class MyAdapter extends ArrayAdapter<DataContainer> {
  public MyAdapter(Context context, int resource, List<DataContainer> objects) {
    super(context, resource, objects);
  }
 
  @Override
  public long getItemId(int position) {
    return getItem(position).ID;
  }
}

In modo da ottenere l'id direttamente chiamando il metodo getItemId dell'adapter o averlo popolato nella onItemClick del listener:

Codice (Java): [Seleziona]
List values = new ArrayList<DataContainer>();
MyAdapter adapter = new MyAdapter(this,android.R.layout.simple_list_item_1, values);
myListView.setAdapter(adapter);
myListView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
  @Override
  public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
    //"position" indica la posizione dell'array
    //"id" indica il corretto ID dell'elemento (perché è stato fatto override di getItemId)
  }
});
Ohmnibus
Le mie app su Play Store

È stata trovata una soluzione al tuo problema? Evidenzia il post più utile premendo . È un ottimo modo per ringraziare chi ti ha aiutato.

Offline maurizio76

  • Nuovo arrivato
  • *
  • Post: 14
  • Respect: +2
    • Mostra profilo
Re:Recupero ID di un button creato a runtime
« Risposta #7 il: 10 Ottobre 2016, 12:57:40 CEST »
0
OK! Grazie
Ho risolto con le tue indicazioni

 ;-)

P.S. ma dov'è il Tasto/Icona "Thanks" ?..non riesco a trovarla
« Ultima modifica: 10 Ottobre 2016, 16:50:42 CEST da maurizio76 »