Autore Topic: Uno spinner per due array  (Letto 988 volte)

Offline astropegaso61

  • Nuovo arrivato
  • *
  • Post: 21
  • Respect: 0
    • Mostra profilo
Uno spinner per due array
« il: 24 Gennaio 2014, 13:12:01 CET »
0
Salve a tutti, mi sono arenato!

Ho un file con due array del tipo (descrizione-valore)
descrizione > italiano
valore > it

Attualmente sul mio spinner seleziono il valore di "sigla_lingua" e lo aggiungo alla URL di base che poi compone l'indirizzo completo da aprire sul browser.
Fermo restando questo, sullo spinner vorrei che venisse visualizato solamente la descrizione "nome_lingua" e continuare a passare il valore "sigla_lingua."
Ma non riesco.
Come dovrei modificare il mio codice?
Mi aiutereste?
Grazie a tutti.

Sul file "values/arrays.xml" ho due array così:
Codice (Java): [Seleziona]
<?xml version="1.0" encoding="utf-8"?>
<resources>
    <string-array name="nome_lingua">
        <item>italiano</item>
        <item>francese</item>
        <item>spagnolo</item>
        <item>tedesco</item>
    </string-array>
    <string-array name="sigla_lingua">
        <item>it</item>
        <item>fr</item>
        <item>es</item>
        <item>de</item>
        </string-array>
</resources>

sul file IndexActivity.java
Codice (Java): [Seleziona]
package it.esempio.test_web;

import it.esempio.test_web.R.string;
import android.os.Bundle;
import android.app.Activity;
import android.content.Context;
import android.content.Intent;
import android.content.SharedPreferences;
import android.net.Uri;
import android.widget.AdapterView;
import android.widget.ArrayAdapter;
import android.widget.Button;
import android.widget.Spinner;
import android.widget.Toast;
import android.widget.AdapterView.OnItemSelectedListener;
import android.view.View;
import android.view.View.OnClickListener;

public class IndexActivity extends Activity {
        Spinner s;
        String valore, sito1="http://www.google.it/";

        private final static String MYIMP = "preferenceDefault";
        private final static String PREF_TEXT = "prefText";
               
        @Override
        protected void onCreate(Bundle savedInstanceState) {
                super.onCreate(savedInstanceState);
                setContentView(R.layout.index);
                updatePreferencesData();
               
        SharedPreferences prefs = getSharedPreferences(MYIMP,Context.MODE_PRIVATE);
        String prefText = prefs.getString(PREF_TEXT, "");

                // -----Codice spinner-----
        s = (Spinner) findViewById(R.id.mio_spinner);
        final ArrayAdapter<CharSequence>
        sceltaLingua = ArrayAdapter.createFromResource(this, R.array.sigla_lingua, android.R.layout.simple_spinner_item);
        sceltaLingua.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
        s.setAdapter(sceltaLingua);
        valore = (String) s.getSelectedItem();
        s.setOnItemSelectedListener(new OnItemSelectedListener() {
               
                        @Override
                        public void onItemSelected(AdapterView<?> arg0, View arg1,
                                        int posizione, long arg3) {
                        Toast.makeText(getApplicationContext(), sceltaLingua.getItem(posizione).toString(), Toast.LENGTH_LONG).show();

                        }

                        @Override
                        public void onNothingSelected(AdapterView<?> arg0) {

                        }
        });

        Uri apreweb = Uri.parse(sito1 + prefText);    
            Intent browserintent = new Intent(Intent.ACTION_VIEW, apreweb);
            browserintent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
            startActivity(browserintent);
                   
        }
       
        private void updatePreferencesData() {
                // TODO Auto-generated method stub
               
        }      
}

iClaude

  • Visitatore
Re:Uno spinner per due array
« Risposta #1 il: 24 Gennaio 2014, 14:27:01 CET »
0
Prova ad usare l'array con le descrizioni nell'adapter.
Poi quando l'utente seleziona un elemento recuperi la sigla dall'array delle sigle usando lo stesso indice (ovviamente gli array devono essere ordinati nello stesso modo).

Offline astropegaso61

  • Nuovo arrivato
  • *
  • Post: 21
  • Respect: 0
    • Mostra profilo
Re:Uno spinner per due array
« Risposta #2 il: 24 Gennaio 2014, 23:14:15 CET »
0
Intanto grazie,
considerando che mi sono ormai incartato, mi indicheresti gentilmente come modificare il codice?
Ti sono ulteriormente grato.

iClaude

  • Visitatore
Re:Uno spinner per due array
« Risposta #3 il: 25 Gennaio 2014, 11:47:10 CET »
0
Quando crei l'adapter usi l'array con le descrizioni:
sceltaLingua = ArrayAdapter.createFromResource(this, R.array.nome_lingua, android.R.layout.simple_spinner_item);

poi nel metodo public void onItemSelected(AdapterView<?> arg0, View arg1,
                                        int posizione, long arg3)
utilizzi il valore di posizione per recuperare la sigla dall'altro array, tipo:
arraySigle[posizione]

Naturalmente prima devi recuperare l'array delle sigle:
String arraySigle[] = getStringArray(R.aray.sigla_lingua);

Offline astropegaso61

  • Nuovo arrivato
  • *
  • Post: 21
  • Respect: 0
    • Mostra profilo
Re:Uno spinner per due array
« Risposta #4 il: 25 Gennaio 2014, 12:56:06 CET »
0
Potresti essere più specifico per favore?
ancora grazie.

Offline astropegaso61

  • Nuovo arrivato
  • *
  • Post: 21
  • Respect: 0
    • Mostra profilo
Re:Uno spinner per due array
« Risposta #5 il: 27 Gennaio 2014, 10:50:50 CET »
0
Chiedevo di essere più specifico in quanto ottengo errore e non so come procedere (limitata conoscenza).
Ho impostato così:
sceltaLingua = ArrayAdapter.createFromResource(this, R.array.nome_lingua, android.R.layout.simple_spinner_item);
Sul metodo:
s.setOnItemSelectedListener(new OnItemSelectedListener() {    
@Override
public void onItemSelected(AdapterView<?> arg0, View arg1, int posizione, long id) {
String arraySigle[] = getStringArray()(R.array.sigla_lingua);   // quì mi da errore.   
Toast.makeText(getApplicationContext(), arraySigle[posizione].toString(), Toast.LENGTH_LONG).show();
}
Ancora grazie per l'aiuto.

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:Uno spinner per due array
« Risposta #6 il: 27 Gennaio 2014, 11:02:53 CET »
0
Magari è una sciocchezza: non è che devi togliere le due parentesi in più? ()

Codice (Java): [Seleziona]
String arraySigle[] = getStringArray()(R.array.sigla_lingua);
PS: per il codice usa la formattazione tramite
NON rispondo a domande nei messaggi privati
Bradipao @ Play Store

iClaude

  • Visitatore
Re:Uno spinner per due array
« Risposta #7 il: 27 Gennaio 2014, 11:05:51 CET »
0
Come suggerito da bradipao togli le due parentesi in più.
Eventualmente prova anche con
getResources ().getStringArray(ecc. ecc.)

Offline astropegaso61

  • Nuovo arrivato
  • *
  • Post: 21
  • Respect: 0
    • Mostra profilo
Re:Uno spinner per due array
« Risposta #8 il: 27 Gennaio 2014, 13:07:41 CET »
0
si era proprio sciocchezza le doppie parentesi.
String arraySigle[] = getResources ().getStringArray(R.array.sigla_lingua);

adesso lo spinner mi mostra il nome lingua mentre il Toast mi mostra la sigla.
comunque non era questo l'effetto cercato. Non sul Toast.

Io avevo impostato "sigla_lingua" per salvarla sulla preferenza
--------------
sceltaLingua = ArrayAdapter.createFromResource(this, R.array.sigla_lingua, android.R.layout.simple_spinner_item);
--------------
mentre volevo che lo spinner mi mostrasse "nome_lingua", ma il valore da passare fosse sempre "sigla_lingua".

solo così "Uri.parse" mi darà la stringa corretta per la url.
----------------------------------
Uri apreweb = Uri.parse(sito1 + prefText);   
Intent browserintent = new Intent(Intent.ACTION_VIEW, apreweb);
browserintent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
startActivity(browserintent);
----------------------------------

iClaude

  • Visitatore
Re:Uno spinner per due array
« Risposta #9 il: 27 Gennaio 2014, 15:53:45 CET »
0
Forse non mi sono spiegato bene...
Il valore da aggiungere alla tua url, cioè la sigla della lingua, lo ricavi dall'array delle sigle nel metodo che gestisce i click sullo spinner (li dentro imposti la tua variabile prefText, se è questa).
Il codice che fa partire il browser, se dipende dalla lingua selezionata, lo devi mettere in un metodo diverso da onCreate, altrimenti parte subito. Ad esempio quando clicchi un bottone o altre azioni simili.