Autore Topic: Gestire variabili di un'altra classe  (Letto 1518 volte)

Offline pupi93

  • Utente junior
  • **
  • Post: 54
  • Respect: +1
    • Mostra profilo
  • Dispositivo Android:
    Huawei Ideos
  • Sistema operativo:
    Ubuntu 10.04
Gestire variabili di un'altra classe
« il: 12 Dicembre 2011, 14:12:25 CET »
0
Salve a tutti! Sono nuovo del forum e mi presento. Sono Pupi93 :D Vi seguo da molto e oggi ho deciso di iscrivermi. Parto subito con un problema, sicuramente idiota, ma non trovo una soluzione.
In pratica devo utilizzare un vettore di stringhe ,istanziato in una determinata classe, in un altra. Ho pensato subito ai metodi get e set ma eclipse mi da sempre errori su questi metodi. In particolare ecco cosa dovrei fare:

Questo è il codice Java dov'è presente il vettore "erbe"
Codice (Java): [Seleziona]
package Erbe.cure;

import android.app.Activity;
import android.os.Bundle;
import android.widget.ArrayAdapter;
import android.widget.ListAdapter;
import android.widget.ListView;

public class Erbe extends Activity {

        /** Called when the activity is first created. */
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.layout_erbe);
       
         String[] erbe = new String[] {"Abete", "Acacia", "Acanto", "Acetosa", "Achillea",
                                "Aconito", "Agarico", "Agave", "Aglio", "Agrifoglio", "Alloro", "Aloe"};
         
                ListView list = (ListView)this.findViewById(R.id.listerbe);
            ListAdapter adapter = new ArrayAdapter<String>(this, android.R.layout.simple_list_item_1, erbe);
            list.setAdapter(adapter);
        }
    }

Questa è l'altra classe dove devo utilizzare il vettore erbe presente nella precedente classe
Codice (Java): [Seleziona]
package Erbe.cure;

import android.app.TabActivity;
import android.widget.Button;
import android.content.Intent;
import android.os.Bundle;
import android.view.View;
import android.widget.AdapterView;
import android.widget.ArrayAdapter;
import android.widget.EditText;
import android.widget.ListAdapter;
import android.widget.ListView;
import android.widget.TabHost;
import android.widget.AdapterView.OnItemClickListener;

public class ErbeecureActivity extends TabActivity {

        /** Called when the activity is first created. */
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
       
        TabHost mTabHost = getTabHost();
       
        Intent erb = new Intent().setClass(this, Erbe.class);
        mTabHost.addTab(mTabHost.newTabSpec("tab_test1").setIndicator("Erbe").setContent(erb));
       
        Intent voc = new Intent().setClass(this, Vocabolario.class);
        mTabHost.addTab(mTabHost.newTabSpec("tab_test2").setIndicator("Vocabolario").setContent(voc));
       
        Intent vet = new Intent().setClass(this, Veterinaria.class);
        mTabHost.addTab(mTabHost.newTabSpec("tab_test3").setIndicator("Veterinaria").setContent(vet));
       
        mTabHost.setCurrentTab(0); //setta il tab di default all'avvio dell'applicazione
       
        final EditText barra_ricerca = (EditText)findViewById(R.id.autoCompleteTextView1);
        Button cerca = (Button)findViewById(R.id.button1);
       
        cerca.setOnClickListener(new View.OnClickListener(){ //Ascolta il button
                // Setta i campi dell'editText a stringa vuota
                public void onClick(View v){
                String parametro = barra_ricerca.getText().toString(); //legge il valore dell'edit text
                int n=0;
               
                while(n==167)
                {
                        if([b]erbe[/b][n].equals(parametro))
                                //trovato
                        else
                                n++;
                       
                        if(n==167 && ![b]erbe[[/b]n].equals(parametro))
                                //toast
                                }
                }
                }
        });
    }
}

Gli ultimi if sono (forse) sbagliati, ma non è quello il problema. Eclipse rileva l'errore negl'if perche non esiste la variabile erbe dichiarata nella classe precedente.
Avete qualche soluzione? Grazie :)

Offline Ricky`

  • Amministratore
  • Utente storico
  • *****
  • Post: 3487
  • Respect: +506
    • Github
    • Google+
    • rciovati
    • Mostra profilo
Re:Gestire variabili di un'altra classe
« Risposta #1 il: 12 Dicembre 2011, 14:19:22 CET »
+1
Basta che dichiari il tuo array come "static final" (l'ho scritto in maiuscolo per convenzione).

Codice (Java): [Seleziona]
package Erbe.cure;

import android.app.Activity;
import android.os.Bundle;
import android.widget.ArrayAdapter;
import android.widget.ListAdapter;
import android.widget.ListView;

public class Erbe extends Activity {

    public static final String[] ERBE = new String[] {"Abete", "Acacia", "Acanto", "Acetosa", "Achillea",
                                "Aconito", "Agarico", "Agave", "Aglio", "Agrifoglio", "Alloro", "Aloe"};

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.layout_erbe);
         
                ListView list = (ListView)this.findViewById(R.id.listerbe);
            ListAdapter adapter = new ArrayAdapter<String>(this, android.R.layout.simple_list_item_1, ERBE);
            list.setAdapter(adapter);
        }
    }

Questa è l'altra classe dove devo utilizzare il vettore erbe presente nella precedente classe
Codice (Java): [Seleziona]
package Erbe.cure;

import android.app.TabActivity;
import android.widget.Button;
import android.content.Intent;
import android.os.Bundle;
import android.view.View;
import android.widget.AdapterView;
import android.widget.ArrayAdapter;
import android.widget.EditText;
import android.widget.ListAdapter;
import android.widget.ListView;
import android.widget.TabHost;
import android.widget.AdapterView.OnItemClickListener;

public class ErbeecureActivity extends TabActivity {

        /** Called when the activity is first created. */
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
       
        TabHost mTabHost = getTabHost();
       
        Intent erb = new Intent().setClass(this, Erbe.class);
        mTabHost.addTab(mTabHost.newTabSpec("tab_test1").setIndicator("Erbe").setContent(erb));
       
        Intent voc = new Intent().setClass(this, Vocabolario.class);
        mTabHost.addTab(mTabHost.newTabSpec("tab_test2").setIndicator("Vocabolario").setContent(voc));
       
        Intent vet = new Intent().setClass(this, Veterinaria.class);
        mTabHost.addTab(mTabHost.newTabSpec("tab_test3").setIndicator("Veterinaria").setContent(vet));
       
        mTabHost.setCurrentTab(0); //setta il tab di default all'avvio dell'applicazione
       
        final EditText barra_ricerca = (EditText)findViewById(R.id.autoCompleteTextView1);
        Button cerca = (Button)findViewById(R.id.button1);
       
        cerca.setOnClickListener(new View.OnClickListener(){ //Ascolta il button
                // Setta i campi dell'editText a stringa vuota
                public void onClick(View v){
                String parametro = barra_ricerca.getText().toString(); //legge il valore dell'edit text
                int n=0;
               

                while(n==167)
                {
                        if(Erbe.ERBE.equals(parametro))
                                //trovato
                        else
                                n++;
                       
                        if(n==167 && !Erbe.ERBE.equals(parametro))
                                //toast
                                }
                }
                }
        });
    }
}


Ora, l'if è sbagliato ma  non saprei come correggerlo perchè non ho capito cosa vuoi fare.

Offline pupi93

  • Utente junior
  • **
  • Post: 54
  • Respect: +1
    • Mostra profilo
  • Dispositivo Android:
    Huawei Ideos
  • Sistema operativo:
    Ubuntu 10.04
Re:Gestire variabili di un'altra classe
« Risposta #2 il: 12 Dicembre 2011, 14:33:08 CET »
0
Ok e per accedere alla variabile nell'altra classe uso questa notazione?
Codice (Java): [Seleziona]
...
if(Erbe.erbe[n].equals(parametro))
                                //trovato
...

Ovvero Nome_della_classe.attributo?

Offline pupi93

  • Utente junior
  • **
  • Post: 54
  • Respect: +1
    • Mostra profilo
  • Dispositivo Android:
    Huawei Ideos
  • Sistema operativo:
    Ubuntu 10.04
Re:Gestire variabili di un'altra classe
« Risposta #3 il: 12 Dicembre 2011, 14:37:54 CET »
0
A ok scusa non avevo visto la seconda parte del codice che mi avevi scritto! Grazie tante! Ho risolto :)

Offline Ricky`

  • Amministratore
  • Utente storico
  • *****
  • Post: 3487
  • Respect: +506
    • Github
    • Google+
    • rciovati
    • Mostra profilo
Re:Gestire variabili di un'altra classe
« Risposta #4 il: 12 Dicembre 2011, 14:43:28 CET »
+1
Se devi fare una ricerca all'interno dell'array ERBE e quest'ultimo è ordinato ti conviene fare una ricerca binaria (il codice non l'ho provato, aggiustalo tu):

Codice (Java): [Seleziona]
int pos = Arrays.binarySearch(Erbe.ERBE, parametro, new Comparator<String>(){
        public int compare(String a, String b)
        {
                return a.compareToIgnoreCase(b);
        }
});

if(pos>=0){
        //trovato in posizione pos
}else{
        //non trovato
}

Offline pupi93

  • Utente junior
  • **
  • Post: 54
  • Respect: +1
    • Mostra profilo
  • Dispositivo Android:
    Huawei Ideos
  • Sistema operativo:
    Ubuntu 10.04
Re:Gestire variabili di un'altra classe
« Risposta #5 il: 12 Dicembre 2011, 15:00:02 CET »
0
Grazie del consiglio. Ho però un altro problema!

Devo gestire il click di una listview con le stesse classi solo che non posso dichiarare static la listview! Come posso fare? Grazie ancora

Codice (Java): [Seleziona]
package Erbe.cure;

import android.app.Activity;
import android.os.Bundle;
import android.widget.ArrayAdapter;
import android.widget.ListAdapter;
import android.widget.ListView;

public class Erbe extends Activity {

    public static final String[] ERBE = new String[] {"Abete", "Acacia", "Acanto", "Acetosa", "Achillea",
                                "Aconito", "Agarico", "Agave", "Aglio", "Agrifoglio", "Alloro", "Aloe"};
      public static final ListView list = (ListView)this.findViewById(R.id.listerbe);
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.layout_erbe);
         
            ListAdapter adapter = new ArrayAdapter<String>(this, android.R.layout.simple_list_item_1, ERBE);
            list.setAdapter(adapter);

Offline Ricky`

  • Amministratore
  • Utente storico
  • *****
  • Post: 3487
  • Respect: +506
    • Github
    • Google+
    • rciovati
    • Mostra profilo
Re:Gestire variabili di un'altra classe
« Risposta #6 il: 12 Dicembre 2011, 15:08:13 CET »
0
Per quale motivo dovresti dichiarare la listview come static?

Offline pupi93

  • Utente junior
  • **
  • Post: 54
  • Respect: +1
    • Mostra profilo
  • Dispositivo Android:
    Huawei Ideos
  • Sistema operativo:
    Ubuntu 10.04
Re:Gestire variabili di un'altra classe
« Risposta #7 il: 12 Dicembre 2011, 16:22:23 CET »
0
Perchè la listview l'ho dichiarata nella classe dove ho istanziato il vettore ERBE. Ma devo utilizzare la listview nell'altra classe!

Offline Ricky`

  • Amministratore
  • Utente storico
  • *****
  • Post: 3487
  • Respect: +506
    • Github
    • Google+
    • rciovati
    • Mostra profilo
R: Re:Gestire variabili di un'altra classe
« Risposta #8 il: 12 Dicembre 2011, 19:24:44 CET »
+1
Perchè la listview l'ho dichiarata nella classe dove ho istanziato il vettore ERBE. Ma devo utilizzare la listview nell'altra classe!

Ne devi creare un'altra.

Inviato dal mio HTC Desire usando Tapatalk

Offline pupi93

  • Utente junior
  • **
  • Post: 54
  • Respect: +1
    • Mostra profilo
  • Dispositivo Android:
    Huawei Ideos
  • Sistema operativo:
    Ubuntu 10.04
Re:Gestire variabili di un'altra classe
« Risposta #9 il: 14 Dicembre 2011, 17:39:19 CET »
0
Niente da fare  :-( Quando creo una nuovo listview e avvio l'app, questa crasha   :-(
Sapresti dirmi inoltre come fare la listview con la ricerca della prima lettera? Tipo quella della rubrica dove compare la levetta grigia accanto quando la scorri! :)

Offline Ricky`

  • Amministratore
  • Utente storico
  • *****
  • Post: 3487
  • Respect: +506
    • Github
    • Google+
    • rciovati
    • Mostra profilo
Re:Gestire variabili di un'altra classe
« Risposta #10 il: 14 Dicembre 2011, 19:43:50 CET »
+1
1) Come da regolamento, posta il logcat
2) filter listview android

Offline pupi93

  • Utente junior
  • **
  • Post: 54
  • Respect: +1
    • Mostra profilo
  • Dispositivo Android:
    Huawei Ideos
  • Sistema operativo:
    Ubuntu 10.04
Re:Gestire variabili di un'altra classe
« Risposta #11 il: 15 Dicembre 2011, 20:12:30 CET »
0
Ecco il gli errori del  LogCat
Codice: [Seleziona]
12-15 18:59:23.839: ERROR/AndroidRuntime(300): FATAL EXCEPTION: main
12-15 18:59:23.839: ERROR/AndroidRuntime(300): java.lang.RuntimeException: Unable to start activity ComponentInfo{Erbe.cure/Erbe.cure.ErbeecureActivity}: java.lang.NullPointerException
12-15 18:59:23.839: ERROR/AndroidRuntime(300):     at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2663)
12-15 18:59:23.839: ERROR/AndroidRuntime(300):     at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2679)
12-15 18:59:23.839: ERROR/AndroidRuntime(300):     at android.app.ActivityThread.access$2300(ActivityThread.java:125)
12-15 18:59:23.839: ERROR/AndroidRuntime(300):     at android.app.ActivityThread$H.handleMessage(ActivityThread.java:2033)
12-15 18:59:23.839: ERROR/AndroidRuntime(300):     at android.os.Handler.dispatchMessage(Handler.java:99)
12-15 18:59:23.839: ERROR/AndroidRuntime(300):     at android.os.Looper.loop(Looper.java:123)
12-15 18:59:23.839: ERROR/AndroidRuntime(300):     at android.app.ActivityThread.main(ActivityThread.java:4627)
12-15 18:59:23.839: ERROR/AndroidRuntime(300):     at java.lang.reflect.Method.invokeNative(Native Method)
12-15 18:59:23.839: ERROR/AndroidRuntime(300):     at java.lang.reflect.Method.invoke(Method.java:521)
12-15 18:59:23.839: ERROR/AndroidRuntime(300):     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:868)
12-15 18:59:23.839: ERROR/AndroidRuntime(300):     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:626)
12-15 18:59:23.839: ERROR/AndroidRuntime(300):     at dalvik.system.NativeStart.main(Native Method)
12-15 18:59:23.839: ERROR/AndroidRuntime(300): Caused by: java.lang.NullPointerException
12-15 18:59:23.839: ERROR/AndroidRuntime(300):     at Erbe.cure.ErbeecureActivity.onCreate(ErbeecureActivity.java:43)
12-15 18:59:23.839: ERROR/AndroidRuntime(300):     at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1047)
12-15 18:59:23.839: ERROR/AndroidRuntime(300):     at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2627)
12-15 18:59:23.839: ERROR/AndroidRuntime(300):     ... 11 more