Autore Topic: Indirizzamento indiretto  (Letto 552 volte)

Offline tonyontravel

  • Nuovo arrivato
  • *
  • Post: 36
  • Respect: 0
    • Mostra profilo
  • Dispositivo Android:
    Samsung Galaxi Next
  • Sistema operativo:
    Windows XP
Indirizzamento indiretto
« il: 23 Gennaio 2012, 14:18:40 CET »
0
Non so se è la sezione giusta, ma ci provo.
Dovendo lavorare con tabelle e array, c'è la possibilità di comporre i nomi delle Variabili, dei id etc......?

Esempio:

messo che io abbia diverse righe del tipo:
Codice (Java): [Seleziona]
TextView tvB01p = (textView) findViewById(R.id.tvPB01)
TextView tvB02p = (textView) findViewById(R.id.tvPB02)
TextView tvB03p = (textView) findViewById(R.id.tvPB03)

mi limito a 3 per brevità ma naturalmente il problema si pone quando gli elementi aumentano

è possibile scrivere un'unica riga di codice in un ciclo for... componendo i nomi per la parte variabile (01, 02, 03 ......)?


Offline bradipao

  • Moderatore globale
  • Utente storico
  • *****
  • Post: 4043
  • keep it simple
  • Respect: +567
    • Github
    • Google+
    • bradipao
    • Mostra profilo
  • Dispositivo Android:
    Nexus 5
  • Play Store ID:
    Bradipao
  • Sistema operativo:
    W7
Re:Indirizzamento indiretto
« Risposta #1 il: 23 Gennaio 2012, 16:24:18 CET »
0
Si, c'è uno Snippet proprio per questa problematica.

Dai un po' un'occhiata alla sezione Snippet e cerca un titolo che parla di nomi delle risorse (vado un po' di fretta).
NON rispondo a domande nei messaggi privati
Bradipao @ Play Store

Offline tonyontravel

  • Nuovo arrivato
  • *
  • Post: 36
  • Respect: 0
    • Mostra profilo
  • Dispositivo Android:
    Samsung Galaxi Next
  • Sistema operativo:
    Windows XP
Re:Indirizzamento indiretto
« Risposta #2 il: 23 Gennaio 2012, 17:30:46 CET »
0
Si, c'è uno Snippet proprio per questa problematica.

Dai un po' un'occhiata alla sezione Snippet e cerca un titolo che parla di nomi delle risorse (vado un po' di fretta).

Ho guardato ma non ho trovato niente.

Quando hai tempo se puoi mi dai ulteriori indizi.

Grazie
Claudio

Offline bradipao

  • Moderatore globale
  • Utente storico
  • *****
  • Post: 4043
  • keep it simple
  • Respect: +567
    • Github
    • Google+
    • bradipao
    • Mostra profilo
  • Dispositivo Android:
    Nexus 5
  • Play Store ID:
    Bradipao
  • Sistema operativo:
    W7
Re:Indirizzamento indiretto
« Risposta #3 il: 23 Gennaio 2012, 17:40:00 CET »
+1
Questo snippet è un esempio di come accedere alle risorse avendo la stringa del nome, che ovviamente ti componi come vuoi. Tu al posto di R.id.tttt avrai un id numerico che ottieni con la prima riga dell'esempio dello snippet.

Accedere alle risorse usando la stringa del nome - Android Developers Italia

Se cercavi qualcosa di più diretto come gli eval() del JS, non c'è.
NON rispondo a domande nei messaggi privati
Bradipao @ Play Store

Offline tonyontravel

  • Nuovo arrivato
  • *
  • Post: 36
  • Respect: 0
    • Mostra profilo
  • Dispositivo Android:
    Samsung Galaxi Next
  • Sistema operativo:
    Windows XP
Re:Indirizzamento indiretto
« Risposta #4 il: 23 Gennaio 2012, 17:43:46 CET »
0
Questo snippet è un esempio di come accedere alle risorse avendo la stringa del nome, che ovviamente ti componi come vuoi. Tu al posto di R.id.tttt avrai un id numerico che ottieni con la prima riga dell'esempio dello snippet.

Accedere alle risorse usando la stringa del nome - Android Developers Italia

Se cercavi qualcosa di più diretto come gli eval() del JS, non c'è.

Grazie, questo l'avevo trovato (ma non l'avevo capito) ora me lo studio.

Offline tonyontravel

  • Nuovo arrivato
  • *
  • Post: 36
  • Respect: 0
    • Mostra profilo
  • Dispositivo Android:
    Samsung Galaxi Next
  • Sistema operativo:
    Windows XP
Re:Indirizzamento indiretto
« Risposta #5 il: 23 Gennaio 2012, 18:15:17 CET »
0
Adesso parto con le prove.

L'unico dubbio, nella getResources().getIdentifier(......., "drawable", .......)
è la cartella sotto res che contiene le risorse, ma nel mio caso la risorsa è in R.id che ci metto?

Una prova con "R.id" intanto la faccio.

Aggiornamento

Ho provato, purtroppo non funziona, non riesco ad indirizzarlo, sembra che il getResources() funzioni solo per tutto quello che è in "res"
per chiarire (non ridete) ho provato sia: (in è il corrispondente stringa dell'indice)
getResources().getIdentifier("R.id.tvPB0" + in , null , getPackageName())
che
getResources().getIdentifier("tvPB0" + in , "R.id" , getPackageName())
« Ultima modifica: 23 Gennaio 2012, 21:18:41 CET da tonyontravel »

Offline tonyontravel

  • Nuovo arrivato
  • *
  • Post: 36
  • Respect: 0
    • Mostra profilo
  • Dispositivo Android:
    Samsung Galaxi Next
  • Sistema operativo:
    Windows XP
Re:Indirizzamento indiretto
« Risposta #6 il: 24 Gennaio 2012, 23:46:37 CET »
0
Da quanto ho potuto capire sul forum Android Developers dovrebbe essere possibile, ma nessuno che esponga la corretta ortografia e sintassi del codice.

Qualche idea?

(per ora buonanotte !!)

Offline Qlimax

  • Moderatore globale
  • Utente senior
  • *****
  • Post: 757
  • Respect: +203
    • Google+
    • _Qlimax
    • Mostra profilo
    • www.egsolutions.ch
  • Dispositivo Android:
    Galaxy Nexus - Nexus One - Wildfire - Magic
  • Play Store ID:
    egsolutions.ch
  • Sistema operativo:
    Ubuntu 12.04, Windows 7
Re:Indirizzamento indiretto
« Risposta #7 il: 25 Gennaio 2012, 00:06:06 CET »
+1
Codice (Java): [Seleziona]
int id=getResources().getIdentifier("miaView2" , "id" , getPackageName());
View view = findViewById(id);
« Ultima modifica: 25 Gennaio 2012, 00:08:37 CET da Qlimax »

Offline tonyontravel

  • Nuovo arrivato
  • *
  • Post: 36
  • Respect: 0
    • Mostra profilo
  • Dispositivo Android:
    Samsung Galaxi Next
  • Sistema operativo:
    Windows XP
Re:Indirizzamento indiretto
« Risposta #8 il: 25 Gennaio 2012, 09:38:53 CET »
0
Codice (Java): [Seleziona]
int id=getResources().getIdentifier("miaView2" , "id" , getPackageName());
View view = findViewById(id);

Purtroppo così non funziona, restituisce sempre 0 :(

Aggiornamento:
come non detto, così è ok !!! grazie
« Ultima modifica: 25 Gennaio 2012, 09:40:47 CET da tonyontravel »

Offline tonyontravel

  • Nuovo arrivato
  • *
  • Post: 36
  • Respect: 0
    • Mostra profilo
  • Dispositivo Android:
    Samsung Galaxi Next
  • Sistema operativo:
    Windows XP
Re:Indirizzamento indiretto
« Risposta #9 il: 25 Gennaio 2012, 10:30:11 CET »
0
Grazie per l'aiuto e vorrei mettere a disposizione di altri il risultato, spero di farlo nella maniera corretta, altrimenti autorizzo sin d'ora i moderatori a spostare e utilizzare il materiale in altro modo.

Dunque, partiamo dall'xml di layout
Codice (XML): [Seleziona]
        <TableRow>

            <!-- Riga Par Buca -->

            <TextView
               style="@style/cellaGio"
               android:text="" >
            </TextView>

            <TextView
               style="@style/cellaTot"
               android:text="Par" >
            </TextView>

            <TextView
               android:id="@+id/tvPB01"
               style="@style/cellaTab"
               android:text="4" >
            </TextView>

            <TextView
               android:id="@+id/tvPB02"
               style="@style/cellaTab"
               android:text="4" >
            </TextView>

            <TextView
               android:id="@+id/tvPB03"
               style="@style/cellaTab"
               android:text="4" >
            </TextView>

            <TextView
               android:id="@+id/tvPB04"
               style="@style/cellaTab"
               android:text="4" >
            </TextView>

            <TextView
               android:id="@+id/tvPB05"
               style="@style/cellaTab"
               android:text="4" >
            </TextView>

            <TextView
               android:id="@+id/tvPB06"
               style="@style/cellaTab"
               android:text="4" >
            </TextView>

            <TextView
               android:id="@+id/tvPB07"
               style="@style/cellaTab"
               android:text="4" >
            </TextView>

            <TextView
               android:id="@+id/tvPB08"
               style="@style/cellaTab"
               android:text="4" >
            </TextView>

            <TextView
               android:id="@+id/tvPB09"
               style="@style/cellaTab"
               android:text="4" >
            </TextView>

            <TextView
               android:id="@+id/tvPBTotF"
               style="@style/cellaTot"
               android:text="00" >
            </TextView>
        </TableRow>

        <TableRow>

            <!-- Riga Hcp Buca -->

            <TextView
               style="@style/cellaGio"
               android:text="" >
            </TextView>

            <TextView
               style="@style/cellaTot"
               android:text="Hcp" >
            </TextView>

            <TextView
               android:id="@+id/tvHB01"
               style="@style/cellaTab"
               android:text="4" >
            </TextView>

            <TextView
               android:id="@+id/tvHB02"
               style="@style/cellaTab"
               android:text="4" >
            </TextView>

            <TextView
               android:id="@+id/tvHB03"
               style="@style/cellaTab"
               android:text="4" >
            </TextView>

            <TextView
               android:id="@+id/tvHB04"
               style="@style/cellaTab"
               android:text="4" >
            </TextView>

            <TextView
               android:id="@+id/tvHB05"
               style="@style/cellaTab"
               android:text="4" >
            </TextView>

            <TextView
               android:id="@+id/tvHB06"
               style="@style/cellaTab"
               android:text="4" >
            </TextView>

            <TextView
               android:id="@+id/tvHB07"
               style="@style/cellaTab"
               android:text="4" >
            </TextView>

            <TextView
               android:id="@+id/tvHB08"
               style="@style/cellaTab"
               android:text="4" >
            </TextView>

            <TextView
               android:id="@+id/tvHB09"
               style="@style/cellaTab"
               android:text="4" >
            </TextView>

            <TextView
               style="@style/cellaTot"
               android:text="" >
            </TextView>
        </TableRow>

        <TableRow>

            <!-- Riga Giocatore -->

            <TextView
               android:id="@+id/tvGIO1"
               style="@style/cellaGio.Nome"
               android:text="Esposito" >
            </TextView>

            <TextView
               android:id="@+id/tvHGI1"
               style="@style/cellaTot"
               android:text="9" >
            </TextView>

            <TextView
               android:id="@+id/tvCGB01"
               style="@style/cellaTabC"
               android:text="1" >
            </TextView>

            <TextView
               android:id="@+id/tvCGB02"
               style="@style/cellaTabC"
               android:text="2" >
            </TextView>

            <TextView
               android:id="@+id/tvCGB03"
               style="@style/cellaTabC"
               android:text="3" >
            </TextView>

            <TextView
               android:id="@+id/tvCGB04"
               style="@style/cellaTabC"
               android:text="4" >
            </TextView>

            <TextView
               android:id="@+id/tvCGB05"
               style="@style/cellaTabC"
               android:text="5" >
            </TextView>

            <TextView
               android:id="@+id/tvCGB06"
               style="@style/cellaTabC"
               android:text="6" >
            </TextView>

            <TextView
               android:id="@+id/tvCGB07"
               style="@style/cellaTabC"
               android:text="7" >
            </TextView>

            <TextView
               android:id="@+id/tvCGB08"
               style="@style/cellaTabC"
               android:text="8" >
            </TextView>

            <TextView
               android:id="@+id/tvCGB09"
               style="@style/cellaTabC"
               android:text="9" >
            </TextView>

            <TextView
               android:id="@+id/tvCGTOT"
               style="@style/cellaTot"
               android:text="Tot" >
            </TextView>
        </TableRow>

metto solo la parte inerente a quanto utilizzato dopo

ecco il codice di utilizzo
Codice (Java): [Seleziona]
package it.nextgolf.rts;

import android.app.Activity;
import android.os.Bundle;
import android.widget.TextView;

public class frontNine extends Activity {

        String[] datiPercorso = new String[40];
        String[] datiPlayer = new String[43];

        @Override
        protected void onCreate(Bundle savedInstanceState) {
                // TODO Auto-generated method stub
                super.onCreate(savedInstanceState);
                setContentView(R.layout.front9);

                TextView[] tvBp = new TextView[9];
                for (int i=0; i<9; i++){
                        String in = "tvPB0"+Integer.toString(i+1);
                        int tvId = getResources().getIdentifier(in , "id" , getPackageName());
                        tvBp[i] = (TextView) findViewById(tvId);
                }
               
                TextView[] tvBh = new TextView[9];
                for (int i=0; i<9; i++){
                        String in = "tvHB0"+Integer.toString(i+1);
                        int tvId = getResources().getIdentifier(in , "id" , getPackageName());
                        tvBh[i] = (TextView) findViewById(tvId);
                }

                TextView[] tvCgb = new TextView[9];
                for (int i=0; i<9; i++){
                        String in = "tvCGB0"+Integer.toString(i+1);
                        int tvId = getResources().getIdentifier(in , "id" , getPackageName());
                        tvCgb[i] = (TextView) findViewById(tvId);
                }

                TextView tvTotPF = (TextView) findViewById(R.id.tvPBTotF);
                TextView tvGIO1 = (TextView) findViewById(R.id.tvGIO1);
                TextView tvHGI1 = (TextView) findViewById(R.id.tvHGI1);

                GiocatoriDb info = new GiocatoriDb(this);
                info.open();
                String[] datiPercorso = info.getCourseData();

                for (int i=0; i<9; i++){
                        int i1=i+1;
                        tvBp[i].setText(datiPercorso[i1]);
                        int i2=i+19;
                        tvBh[i].setText(datiPercorso[i2]);
                }

                tvTotPF.setText(datiPercorso[37]);
               
                for (int np=0; np<4; np++){
                        String[] datiPlayer = info.getPlayerData(np);
                        tvGIO1.setText(datiPlayer[2]);
                        tvHGI1.setText(datiPlayer[3]);
                        for (int i=0; i<9; i++){
                                int i1=i+7;
                                tvCgb[i].setText(datiPlayer[i1]);
                        }
                }
               
                info.close();
        }
}

ometto la classe utilizzata per recuperare i dati dal database SQLite che tramite la getCourseData() e la getPlayerData() popola gli array datiPercorso[] e datiPlayer[], dovesse essere utile la posso aggiungere.

spero sia utile, grazie ancora in particolare a Qlimax e Bradipao
« Ultima modifica: 25 Gennaio 2012, 10:46:12 CET da tonyontravel »