Autore Topic: Problema con wizard  (Letto 865 volte)

Offline androider

  • Translate Team
  • Utente normale
  • ***
  • Post: 261
  • In campo come nella vita.
  • Respect: +1
    • andreadannibale
    • andreadevil
    • Mostra profilo
    • AnAndroider
  • Dispositivo Android:
    Nexus One
  • Play Store ID:
    AnAnApps
  • Sistema operativo:
    Mac Os X Snow Leopard
Problema con wizard
« il: 18 Dicembre 2010, 14:45:31 CET »
0
Ciao ragazzi, probabilmente la sezione non è giusta però non sapevo quale fosse la posizione giusta..comunque sto cercando di realizzare un wizard: un activity che viene eseguita solo al primo accesso e salva alcuni dati ed ho usato questo codice:
Codice (Java): [Seleziona]
if(prefs.getBoolean("firstime", true)){
                         launchWiz();
                 }

E fino qui l'activity parte, poi nell'altra ho:
Codice (Java): [Seleziona]
         prefs.edit().putBoolean("firstime", false);
per fare in modo che al prossimo accesso sia false e non parte questa activity. Ma non funziona, mi parte lo stesso questa activity.
Se i cosiddetti "migliori" di noi avessero il coraggio di
sottovalutarsi almeno un po' vivremmo in un mondo infinitamente migliore.

In ogni cAso nessun rimorso.

Offline Qlimax

  • Moderatore globale
  • Utente senior
  • *****
  • Post: 757
  • Respect: +202
    • 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:Problema con wizard
« Risposta #1 il: 18 Dicembre 2010, 14:50:40 CET »
0
dopo

prefs.edit().putBoolean("firstime", false);

chiama

prefs.edit().commit();

per salvare i cambiamenti
« Ultima modifica: 21 Dicembre 2010, 22:56:21 CET da Qlimax »

Offline androider

  • Translate Team
  • Utente normale
  • ***
  • Post: 261
  • In campo come nella vita.
  • Respect: +1
    • andreadannibale
    • andreadevil
    • Mostra profilo
    • AnAndroider
  • Dispositivo Android:
    Nexus One
  • Play Store ID:
    AnAnApps
  • Sistema operativo:
    Mac Os X Snow Leopard
Re:Problema con wizard
« Risposta #2 il: 18 Dicembre 2010, 15:15:15 CET »
0
purtroppo l'avevo già fatto..non è quello il problema a quanto pare..
Se i cosiddetti "migliori" di noi avessero il coraggio di
sottovalutarsi almeno un po' vivremmo in un mondo infinitamente migliore.

In ogni cAso nessun rimorso.

Offline Qlimax

  • Moderatore globale
  • Utente senior
  • *****
  • Post: 757
  • Respect: +202
    • 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:Problema con wizard
« Risposta #3 il: 18 Dicembre 2010, 15:20:17 CET »
0
mi sa che il problema sta' a monte ...


posta un po piu di codice che vediamo dove sta il problema

Offline androider

  • Translate Team
  • Utente normale
  • ***
  • Post: 261
  • In campo come nella vita.
  • Respect: +1
    • andreadannibale
    • andreadevil
    • Mostra profilo
    • AnAndroider
  • Dispositivo Android:
    Nexus One
  • Play Store ID:
    AnAnApps
  • Sistema operativo:
    Mac Os X Snow Leopard
Re:Problema con wizard
« Risposta #4 il: 18 Dicembre 2010, 15:22:59 CET »
0
la classe wizard è questa:
Codice (Java): [Seleziona]
package com.ananapp;

import android.app.Activity;
import android.content.Intent;
import android.content.SharedPreferences;
import android.os.Bundle;
import android.preference.PreferenceManager;
import android.view.View;
import android.widget.AdapterView;
import android.widget.ArrayAdapter;
import android.widget.Button;
import android.widget.EditText;
import android.widget.Spinner;
import android.widget.AdapterView.OnItemSelectedListener;

public class Wizard extends Activity {
       
        SharedPreferences prefs;
    public String selectedCategoria;

       
        @Override
        public void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.wizard);
           
           final EditText nome=(EditText) findViewById(R.id.wiznome);
           final EditText eta=(EditText) findViewById(R.id.wizeta);
           final EditText h=(EditText) findViewById(R.id.wizh);
           final EditText peso=(EditText) findViewById(R.id.wizpeso);
           final EditText team=(EditText) findViewById(R.id.wizteam);
           final EditText ruolo=(EditText) findViewById(R.id.wizrole);
           final Spinner categoria = (Spinner) findViewById(R.id.category);
           Button finish=(Button) findViewById(R.id.finish);
           
                prefs = PreferenceManager.getDefaultSharedPreferences(this);
         prefs.edit().putBoolean("firstime", false);
         prefs.edit().commit();


           
            final ArrayAdapter<CharSequence> adapter1 = ArrayAdapter.createFromResource(
                    this, R.array.categ_array, android.R.layout.simple_spinner_item);
            adapter1.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
            categoria.setAdapter(adapter1);
           
            categoria.setOnItemSelectedListener(new OnItemSelectedListener() {

                @Override
                public void onItemSelected(AdapterView<?> arg0, View arg1, int position, long id) {
                                             
                     selectedCategoria =arg0.getItemAtPosition(position).toString();
                                           
                }

                @Override
                public void onNothingSelected(AdapterView<?> arg0) {
               
                }
               
             });
           
           
           
           finish.setOnClickListener(new View.OnClickListener(){

                @Override
                public void onClick(View v) {
                       
                        prefs.edit().putString("name", nome.getText().toString().toUpperCase());
                    prefs.edit().putString("eta", eta.getText().toString().toUpperCase());
                    prefs.edit().putString("role", ruolo.getText().toString().toUpperCase());
                    prefs.edit().putString("peso", peso.getText().toString().toUpperCase());
                    prefs.edit().putString("altezza", h.getText().toString().toUpperCase());
                    prefs.edit().putString("textData", team.getText().toString().toUpperCase());
                    prefs.edit().putString("categoria", selectedCategoria);
                         launchHome();              
                        }}      
                );
                 
}
        public void launchHome(){
        Intent i=new Intent(this,Home.class);
        startActivity(i);
}
}

Poi questo è il valore che dovrei cambiare:
Codice (Java): [Seleziona]
<CheckBoxPreference
                        android:order="12"
                        android:key="firstime"
                        android:title="Check per eseguire il wizard"
                        android:defaultValue="true">
                        </CheckBoxPreference>
Se i cosiddetti "migliori" di noi avessero il coraggio di
sottovalutarsi almeno un po' vivremmo in un mondo infinitamente migliore.

In ogni cAso nessun rimorso.

Offline Qlimax

  • Moderatore globale
  • Utente senior
  • *****
  • Post: 757
  • Respect: +202
    • 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:Problema con wizard
« Risposta #5 il: 20 Dicembre 2010, 08:52:15 CET »
0
potresti postare anche la prima activity?

Offline MarcoDuff

  • Moderatore globale
  • Utente storico
  • *****
  • Post: 1073
  • Respect: +202
    • Google+
    • marcoduff
    • Mostra profilo
    • MarcoDuff's Blog
  • Dispositivo Android:
    Samsung Galaxy Nexus
  • Play Store ID:
    MarcoDuff
  • Sistema operativo:
    Windows 7
Re:Problema con wizard
« Risposta #6 il: 20 Dicembre 2010, 15:41:35 CET »
0
Sostituisci
Codice (Java): [Seleziona]
prefs.edit().putBoolean("firstime", false);
         prefs.edit().commit();

con

Codice (Java): [Seleziona]
prefs.edit().putBoolean("firstime", false).commit();

Offline androider

  • Translate Team
  • Utente normale
  • ***
  • Post: 261
  • In campo come nella vita.
  • Respect: +1
    • andreadannibale
    • andreadevil
    • Mostra profilo
    • AnAndroider
  • Dispositivo Android:
    Nexus One
  • Play Store ID:
    AnAnApps
  • Sistema operativo:
    Mac Os X Snow Leopard
Re:Problema con wizard
« Risposta #7 il: 21 Dicembre 2010, 12:27:58 CET »
0
La prima activity fino al punto interessato è questa:
Codice (Java): [Seleziona]
package com.ananapp;

import java.util.ArrayList;
import java.util.HashMap;
import android.app.Activity;
import android.app.AlertDialog;
import android.content.DialogInterface;
import android.content.Intent;
import android.content.SharedPreferences;
import android.net.Uri;
import android.os.Bundle;
import android.preference.PreferenceManager;
import android.view.Menu;
import android.view.MenuItem;
import android.view.SubMenu;
import android.view.View;
import android.widget.AdapterView;
import android.widget.ListView;
import android.widget.SimpleAdapter;
import android.widget.Toast;
import android.widget.AdapterView.OnItemClickListener;

public class Home extends Activity implements AboutActivity.OnStartupEulaListener, AboutActivity.OnStartupChangeLogListener {

        SharedPreferences prefs;

        @Override
          public void onEulaAction(boolean isAccepted) {
        if(isAccepted) Toast.makeText(this, "Eula accepted", Toast.LENGTH_SHORT).show();
        else if(isAccepted) Toast.makeText(this, "Eula refused", Toast.LENGTH_SHORT).show();
}
       
        @Override
        public boolean onCreateOptionsMenu(Menu menu) {
               
                menu.add(Menu.NONE, 1, Menu.NONE, "Add match").setIcon(android.R.drawable.ic_menu_add);
        menu.add(Menu.NONE, 8, Menu.NONE, "About").setIcon(android.R.drawable.ic_menu_info_details);
                SubMenu subMenu = menu.addSubMenu(Menu.NONE,Menu.NONE,Menu.NONE,"More..").setIcon(android.R.drawable.ic_menu_more);
        subMenu.add(Menu.NONE, 2, Menu.NONE, R.string.aboutactivity_readme);
        subMenu.add(Menu.NONE, 3, Menu.NONE, R.string.aboutactivity_faq);
        subMenu.add(Menu.NONE, 4, Menu.NONE, R.string.aboutactivity_changelog);
        subMenu.add(Menu.NONE, 5, Menu.NONE, R.string.aboutactivity_license);
        subMenu.add(Menu.NONE, 6, Menu.NONE, R.string.aboutactivity_privacy);
        subMenu.add(Menu.NONE, 7, Menu.NONE, R.string.aboutactivity_todo);
        menu.add(Menu.NONE, 9, Menu.NONE, "Calendar").setIcon(android.R.drawable.ic_menu_my_calendar);
        menu.add(Menu.NONE, 10, Menu.NONE, "Exit").setIcon(android.R.drawable.ic_menu_close_clear_cancel);

                return super.onCreateOptionsMenu(menu);
}
       
           @Override
            public boolean onMenuItemSelected(int featureId, MenuItem item) {
                switch (item.getItemId()) {
                       
                                case 1: launchAdd(); break;
                        case 2: AboutActivity.showReadmeDialog(this); break;
                        case 3: AboutActivity.showFaqDialog(this); break;
                        case 4: AboutActivity.showChangeLogDialog(this); break;
                        case 5: AboutActivity.showEulaDialog(this); break;
                        case 6: AboutActivity.showPrivacyDialog(this); break;
                        case 7: AboutActivity.showTodoDialog(this); break;
                        case 8: startAboutActivity(); break;
                        case 9: launchCalendar(); break;
                        case 10:AlertDialog.Builder builder2 = new AlertDialog.Builder(this);
                                        builder2.setMessage("Exit ?")
                                       .setCancelable(false)
                                       .setPositiveButton("Yes", new DialogInterface.OnClickListener() {
                                           public void onClick(DialogInterface dialog, int id) {
                                                   android.os.Process.killProcess(android.os.Process.myPid());
                                           }
                                       })
                                       .setNegativeButton("No", new DialogInterface.OnClickListener() {
                                           public void onClick(DialogInterface dialog, int id) {
                                                dialog.cancel();
                                           }
                                       });
                                AlertDialog alert2 = builder2.create();
                                alert2.show();
                               
                       
                        return true;
                       
                        }
                return super.onMenuItemSelected(featureId, item);
            }
       
        /** Called when the activity is first created. */
        @Override
        public void onCreate(Bundle savedInstanceState) {
                AboutActivity.showStartupEula(this);
                 AboutActivity.showStartupChangeLog(this);
            super.onCreate(savedInstanceState);
            prefs=PreferenceManager.getDefaultSharedPreferences(this);
            if(prefs.getBoolean("firstime", true)){
                         launchWiz();
                 }
            setContentView(R.layout.ahome);
Se i cosiddetti "migliori" di noi avessero il coraggio di
sottovalutarsi almeno un po' vivremmo in un mondo infinitamente migliore.

In ogni cAso nessun rimorso.

Offline androider

  • Translate Team
  • Utente normale
  • ***
  • Post: 261
  • In campo come nella vita.
  • Respect: +1
    • andreadannibale
    • andreadevil
    • Mostra profilo
    • AnAndroider
  • Dispositivo Android:
    Nexus One
  • Play Store ID:
    AnAnApps
  • Sistema operativo:
    Mac Os X Snow Leopard
Re:Problema con wizard
« Risposta #8 il: 21 Dicembre 2010, 14:41:55 CET »
0
Ho risolto, grazie.
Se i cosiddetti "migliori" di noi avessero il coraggio di
sottovalutarsi almeno un po' vivremmo in un mondo infinitamente migliore.

In ogni cAso nessun rimorso.

Offline JD

  • Amministratore
  • Utente storico
  • *****
  • Post: 1600
  • Respect: +232
    • leinardi
    • Mostra profilo
  • Dispositivo Android:
    LG Nexus 5
  • Sistema operativo:
    L'ultima Ubuntu
Re:Problema con wizard
« Risposta #9 il: 21 Dicembre 2010, 14:49:39 CET »
0
Possiamo sapere come? :)
È stata trovata una soluzione al tuo problema?
Evidenzia il post più utile premendo . È un ottimo modo per ringraziare chi ti ha aiutato ;).
E se hai aperto tu il thread marcalo come risolto cliccando !

Offline androider

  • Translate Team
  • Utente normale
  • ***
  • Post: 261
  • In campo come nella vita.
  • Respect: +1
    • andreadannibale
    • andreadevil
    • Mostra profilo
    • AnAndroider
  • Dispositivo Android:
    Nexus One
  • Play Store ID:
    AnAnApps
  • Sistema operativo:
    Mac Os X Snow Leopard
Re:Problema con wizard
« Risposta #10 il: 21 Dicembre 2010, 14:51:18 CET »
0
Si scusate se non l'ho detto subito. Comunque ho risolto seguendo il consiglio di MarcoDuff e cioè aggiungendo .commit() direttamente sulla condizione..
Se i cosiddetti "migliori" di noi avessero il coraggio di
sottovalutarsi almeno un po' vivremmo in un mondo infinitamente migliore.

In ogni cAso nessun rimorso.

Offline MarcoDuff

  • Moderatore globale
  • Utente storico
  • *****
  • Post: 1073
  • Respect: +202
    • Google+
    • marcoduff
    • Mostra profilo
    • MarcoDuff's Blog
  • Dispositivo Android:
    Samsung Galaxy Nexus
  • Play Store ID:
    MarcoDuff
  • Sistema operativo:
    Windows 7
Re:Problema con wizard
« Risposta #11 il: 21 Dicembre 2010, 15:03:40 CET »
+2
aggiungendo .commit() direttamente sulla condizione..

Attenzione, quella non è una condizione! Ma un oggetto! ;)

Facciamo l'analisi logica ( o_O ) dell'istruzione:

Esaminiamo l'espressione corretta:
prefs.edit().putBoolean("firstime", false).commit()

Partendo da un oggetto di tipo SharedPreferences (prefs), istanzi un nuovo oggetto di tipo SharedPreferences.Editor (edit), inserisci un booleano nell'editor (putBoolean) e fai la commit (commit).

Nota che le funzioni putBoolean, commit restituiscono tutti un puntatore allo stesso oggetto SharedPreferences.Editor (per l'esattezza hanno tutti un "return this"). Anche il metodo edit ha un return this, ma questa volta riverito ad una nuova istanza. Questa tipologia di scrittura delle istruzioni (nata penso da una illuminazione di chi ha scritto le jQuery) è potentissima e contemporaneamente sporchissima ed induce ad errori enormi (si è capito che la sconsiglio?? ??).

Esaminiamo le espressioni errate:
prefs.edit().putBoolean("firstime", false);
prefs.edit().commit();


(Prima riga) Partendo da un oggetto di tipo SharedPreferences (prefs), istanzi un nuovo oggetto di tipo SharedPreferences.Editor (edit), inserisci un booleano nell'editor (putBoolean).
(Seconda riga) Partendo dallo stesso oggetto di tipo SharedPreferences (prefs), istanzi un nuovo (si si, nuovo, NON quello della prima riga) oggetto di tipo SharedPreferences.Editor (edit) e fai la commit (commit). (ovviamente fai la commit di nulla, visto che non hai modificato nulla).

Offline androider

  • Translate Team
  • Utente normale
  • ***
  • Post: 261
  • In campo come nella vita.
  • Respect: +1
    • andreadannibale
    • andreadevil
    • Mostra profilo
    • AnAndroider
  • Dispositivo Android:
    Nexus One
  • Play Store ID:
    AnAnApps
  • Sistema operativo:
    Mac Os X Snow Leopard
Re:Problema con wizard
« Risposta #12 il: 21 Dicembre 2010, 15:05:06 CET »
0
Molto molto chiaro. Grazie mille.
Se i cosiddetti "migliori" di noi avessero il coraggio di
sottovalutarsi almeno un po' vivremmo in un mondo infinitamente migliore.

In ogni cAso nessun rimorso.

Offline Qlimax

  • Moderatore globale
  • Utente senior
  • *****
  • Post: 757
  • Respect: +202
    • 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:Problema con wizard
« Risposta #13 il: 21 Dicembre 2010, 23:01:43 CET »
0
Sorry mea culpa.

Di solito prendo l'oggetto della classe Editor tramite edit(), lo metto metto in una variabile e poi lavoro su questa variabile oggetto. mi era sfuggito che ad ogni chiamata edit() viene ritornato  un oggetto diverso...
bene a sapersi