Autore Topic: checktextview che si inverte al cambio dell'orientamento (verticale-orizzontale)  (Letto 732 volte)

Offline ALEX88-ANDR0!D

  • Utente normale
  • ***
  • Post: 173
  • The Special One
  • Respect: +13
    • Google+
    • droidev88
    • Mostra profilo
  • Dispositivo Android:
    HTC DESIRE HD
  • Sistema operativo:
    WINDOWS 7
ciao a tutti , sto sviluppando una app per lista della spesa , l'app funziona abbastanza bene , sia in eclipse che debug (con logcat) non ho nessun errore apparentemente , ieri sera ho deciso di implementare un checktextview alla listview che contiene gli oggetti della lista della spesa , ho provato a mettere giu un po' di codice e riesco a selezionare più oggetti ecc... , solo che quando ruoto il dispositivo si invertono le selezioni (es. se seleziono il primo elemento della lista di 4 elementi e metto il cel in orizzontale si toglie la spunta al primo e lo mette all'ultimo , se riposiziono il cellulare in verticale viene rimesso la spunta sul primo )  cosa può essere ?? . inanzitutto vi posto la classe .java riguardante la lista che viene popolata tramite database

Codice (Java): [Seleziona]
import android.app.Activity;
import android.app.ListActivity;
import android.content.ContentValues;
import android.content.Intent;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteOpenHelper;
import android.os.Bundle;
import android.util.Log;
import android.view.ContextMenu;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.view.ContextMenu.ContextMenuInfo;
import android.widget.CursorAdapter;
import android.widget.ListView;
import android.widget.SimpleCursorAdapter;
import android.widget.AdapterView.AdapterContextMenuInfo;

public class VediListaSpesa extends ListActivity {
        // Tag del Log
        private final static String TAG_LOG = "TeamManagerActivity";
        // Identificatore della versioe
        private final static int DB_VERSION = 1;
        // Identificatore del risultato di creazione
        private final static int CREATE_ACTIVITY_RESULT = 1;
        // Identificatore del risultato di update
        private final static int UPDATE_ACTIVITY_RESULT = 2;
        // Identificatore delle voci del Menu Contestuale
        private final static int DELETE_MENU_OPTION = 1;
        private final static int UPDATE_MENU_OPTION = 2;
        // Mapping tra i campi della tabella ed elementi del layout di riga
        private String[] FROMS = new String[] { TeamMetaData.NOME,
                        TeamMetaData.QUANTITA, TeamMetaData.PREZZO, TeamMetaData.NEGOZIO };
        private int[] TOS = new int[] { R.id.teamNome, R.id.teamQuantita,
                        R.id.teamPrezzo, R.id.teamNegozio };
        /*
         * Riferimento al DB
         */

        private SQLiteDatabase db;
        /*
         * Cursore dei risultati
         */

        private Cursor cursor;
        /*
         * Riferimento all'Adpater
         */

        private CursorAdapter adapter;

        /** Called when the activity is first created. */
        @Override
        public void onCreate(Bundle savedInstanceState) {
                super.onCreate(savedInstanceState);
                setContentView(R.layout.mainlista);
               
//codice prova  per check
        final ListView checkBox1 = getListView();

        checkBox1.setItemsCanFocus(false);
        checkBox1.setChoiceMode(ListView.CHOICE_MODE_MULTIPLE);
        getListView().getCheckedItemPositions();
        getListView().getCheckedItemIds();
        //fine cod per check
                // Otteniamo il riferimento al DB in lettura e scrittura
                db = dbHelper.getWritableDatabase();
                // Eseguiamo la query per estrarre tutte le informazioni dalla
                // tabella
                cursor = db.query(TeamMetaData.TABLE_NAME, TeamMetaData.COLUMNS, null,
                                null, null, null, null);
                // Creiamo un Adapter con il cursore
                adapter = new SimpleCursorAdapter(this, R.layout.row_layout, cursor,
                                FROMS, TOS);
                // Lo assegnamo alla ListView
                getListView().setAdapter(adapter);
                // Registriamo il Menu Contesuale
                registerForContextMenu(getListView());
               
        }

        @Override
        protected void onStart() {
                super.onStart();
                updateListView();
        }
       
        @Override
        protected void onStop() {
                super.onStop();
                // Liberiamo le risorse del cursor
                cursor.deactivate();
        }      

        @Override
        protected void onDestroy() {
                super.onDestroy();
                // Chiudiamo il cursore
                cursor.close();
                // Chiudiamo il DB
                db.close();
        }

        @Override
        public boolean onCreateOptionsMenu(Menu menu) {
                // L'unico possibile menu e' quello di creazione per cui non serve
                // fare controlli
                menu.add(Menu.FIRST, Menu.FIRST, Menu.FIRST, R.string.create_option);
                // Lo visualizziamo
                return true;
        }

        @Override
        public boolean onOptionsItemSelected(MenuItem item) {
                // Dobbiamo gestire l'Intent in questo modo perchè lo dobbiamo
                // eseguire con o startActivityForResult e non semplicemente come
                // Intent
                Intent createIntent = new Intent(this, EditTeamActivity.class);
                startActivityForResult(createIntent, CREATE_ACTIVITY_RESULT);
                return true;
        }

        @Override
        public void onCreateContextMenu(ContextMenu menu, View v,
                        ContextMenuInfo menuInfo) {
                // Creiamo il Menu da associare all'item
                int group = Menu.FIRST;
                menu.add(group, DELETE_MENU_OPTION, Menu.FIRST, R.string.delete_option);
                menu.add(group, UPDATE_MENU_OPTION, Menu.FIRST + 1,
                                R.string.update_option);
        }

        @Override
        public boolean onContextItemSelected(MenuItem item) {
                AdapterContextMenuInfo info = (AdapterContextMenuInfo) item
                                .getMenuInfo();
                long teamId = info.id;
                switch (item.getItemId()) {
                case DELETE_MENU_OPTION:
                        // Lo cancelliamo
                        db = dbHelper.getWritableDatabase();
                        db.delete("TEAM", "_id=" + teamId, null);
                        // Aggiorniamo
                        updateListView();
                        return true;
                case UPDATE_MENU_OPTION:
                        // Dobbiamo inviarel'Intent con il Team alla Activity per
                        // l'editazione
                        Cursor tmpCursor = db.query(TeamMetaData.TABLE_NAME,
                                        TeamMetaData.COLUMNS, "_id=" + teamId, null, null, null,
                                        null);
                        if (tmpCursor.moveToNext()) {
                                Intent updateIntent = new Intent(this, EditTeamActivity.class);
                                Bundle teamBundle = new Bundle();
                                Team team = new Team();
                                team.id = teamId;
                                team.nome = tmpCursor.getString(tmpCursor
                                                .getColumnIndex(TeamMetaData.NOME));
                                team.quantita = tmpCursor.getString(tmpCursor
                                                .getColumnIndex(TeamMetaData.QUANTITA));
                                team.prezzo = tmpCursor.getString(tmpCursor
                                                .getColumnIndex(TeamMetaData.PREZZO));
                                team.negozio = tmpCursor.getString(tmpCursor
                                                .getColumnIndex(TeamMetaData.NEGOZIO));
                                teamBundle.putParcelable("team", team);
                                updateIntent.putExtra("team", teamBundle);
                                startActivityForResult(updateIntent, UPDATE_ACTIVITY_RESULT);
                        }
                        return true;
                default:
                        return super.onContextItemSelected(item);
                }
        }

        @Override
        protected void onActivityResult(int requestCode, int resultCode, Intent data) {
                switch (resultCode) {
                case Activity.RESULT_OK:
                        // Salviamo il risultato nel DB
                        Bundle extra = data.getBundleExtra("team");
                        Team team = (Team) extra.getParcelable("team");
                        // Li inseriamo nel DB
                        ContentValues values = new ContentValues();
                        values.put(TeamMetaData.NOME, team.nome);
                        values.put(TeamMetaData.QUANTITA, team.quantita);
                        values.put(TeamMetaData.PREZZO, team.prezzo);
                        values.put(TeamMetaData.NEGOZIO, team.negozio);
                        db = dbHelper.getWritableDatabase();
                        // A seconda del tipo di risposta facciamo un inserimento o un
                        // update
                        switch (requestCode) {
                        case CREATE_ACTIVITY_RESULT:
                                db.insert("TEAM", "negozio", values);
                                break;
                        case UPDATE_ACTIVITY_RESULT:
                                db.update("TEAM", values, "_id="+team.id, null);
                                break;
                        default:
                                break;
                        }
                default:
                        break;
                }
        }

        /*
         * Metodo di utilità che permettedi aggiornare il contenuto della ListView
         */

        private void updateListView() {
                // Diciamo al Cursor di rieseguire la query
                cursor.requery();
                // Notifichiamo le View associte agli adapter di fare il refresh
                adapter.notifyDataSetChanged();
        }

        private final SQLiteOpenHelper dbHelper = new SQLiteOpenHelper(this,
                        "TEAM_DB", null, DB_VERSION) {

                @Override
                public void onCreate(SQLiteDatabase db) {
                        Log.i(TAG_LOG, "Inizio Creazione DB");
                        StringBuilder createQuery = new StringBuilder();
                        createQuery.append("CREATE TABLE \"TEAM\" (");
                        createQuery
                                        .append("           \"_id\" INTEGER PRIMARY KEY AUTOINCREMENT,");
                        createQuery.append("        \"nome\" TEXT NOT NULL,");
                        createQuery.append("        \"quantita\" TEXT NOT NULL,");
                        createQuery.append("        \"prezzo\" TEXT NOT NULL,");
                        createQuery.append("        \"negozio\" TEXT");
                        createQuery.append(")");
                        db.execSQL(createQuery.toString());
                }

                @Override
                public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
                        // Nope
                        Log.i(TAG_LOG, "Aggiornamento non implementato");
                }

        };

}

questo invece è la sola parte riguardante il check
Codice (Java): [Seleziona]
//codice prova  per check
        final ListView checkBox1 = getListView();

        checkBox1.setItemsCanFocus(false);
        checkBox1.setChoiceMode(ListView.CHOICE_MODE_MULTIPLE);
        getListView().getCheckedItemPositions();
        getListView().getCheckedItemIds();
        //fine cod per check

grazie mille in anticipo  ;-)


EDIT Aggiunta
oggi ho notato in debug che lo stesso errore cioè che cambia gli oggetti selezionati cambiano (si invertono) anche dopo un semplice click ! o_O
 
« Ultima modifica: 05 Ottobre 2011, 17:40:04 CEST da ALEX88-ANDR0!D »
È 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 ALEX88-ANDR0!D

  • Utente normale
  • ***
  • Post: 173
  • The Special One
  • Respect: +13
    • Google+
    • droidev88
    • Mostra profilo
  • Dispositivo Android:
    HTC DESIRE HD
  • Sistema operativo:
    WINDOWS 7
0
ciao , ho trovato un pezzo di codice http://stackoverflow.com/questions/4803756/android-cursoradapter-listview-and-checkbox/4804366#4804366 pultroppo però continuo ad avere il problema ... avete qualche idea , magari  provare con saveistance state o restore ... ora vado a guardarmi http://alltechsolution.wordpress.com/2011/03/15/android-listview-with-checkbox-retain-state/
« Ultima modifica: 05 Ottobre 2011, 20:41:04 CEST da ALEX88-ANDR0!D »
È 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 ALEX88-ANDR0!D

  • Utente normale
  • ***
  • Post: 173
  • The Special One
  • Respect: +13
    • Google+
    • droidev88
    • Mostra profilo
  • Dispositivo Android:
    HTC DESIRE HD
  • Sistema operativo:
    WINDOWS 7
0
ciao ,inanzitutto ecco il novo codice
Codice (Java): [Seleziona]
import android.app.Activity;
import android.app.ListActivity;
import android.content.ContentValues;
import android.content.Context;
import android.content.Intent;
import android.content.SharedPreferences;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteOpenHelper;
import android.os.Bundle;
import android.util.Log;
import android.view.ContextMenu;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.view.ContextMenu.ContextMenuInfo;
import android.widget.Checkable;
import android.widget.CursorAdapter;
import android.widget.ListView;
import android.widget.SimpleCursorAdapter;
import android.widget.AdapterView.AdapterContextMenuInfo;


public class VediListaSpesa extends ListActivity  {
        private Checkable checkBox1;
        // Tag del Log
        private final static String TAG_LOG = "TeamManagerActivity";
        // Identificatore della versioe
        private final static int DB_VERSION = 1;
        // Identificatore del risultato di creazione
        private final static int CREATE_ACTIVITY_RESULT = 1;
        // Identificatore del risultato di update
        private final static int UPDATE_ACTIVITY_RESULT = 2;
        // Identificatore delle voci del Menu Contestuale
        private final static int DELETE_MENU_OPTION = 1;
        private final static int UPDATE_MENU_OPTION = 2;
        // Mapping tra i campi della tabella ed elementi del layout di riga
        private String[] FROMS = new String[] { TeamMetaData.NOME,
                        TeamMetaData.QUANTITA, TeamMetaData.PREZZO, TeamMetaData.NEGOZIO };
        private int[] TOS = new int[] { R.id.teamNome, R.id.teamQuantita,
                        R.id.teamPrezzo, R.id.teamNegozio };
        /*
         * Riferimento al DB
         */

        private SQLiteDatabase db;
        /*
         * Cursore dei risultati
         */

        private Cursor cursor;
        /*
         * Riferimento all'Adpater
         */

        private CursorAdapter adapter;

        /** Called when the activity is first created. */
        @Override
        public void onCreate(Bundle savedInstanceState) {
                super.onCreate(savedInstanceState);
                setContentView(R.layout.mainlista);
               

                // Otteniamo il riferimento al DB in lettura e scrittura
                db = dbHelper.getWritableDatabase();
                // Eseguiamo la query per estrarre tutte le informazioni dalla
                // tabella
                cursor = db.query(TeamMetaData.TABLE_NAME, TeamMetaData.COLUMNS, null,
                                null, null, null, null);
                // Creiamo un Adapter con il cursore
                adapter = new SimpleCursorAdapter(this, R.layout.row_layout, cursor,
                                FROMS, TOS);
                // Lo assegnamo alla ListView
                getListView().setAdapter(adapter);
                // Registriamo il Menu Contesuale
                registerForContextMenu(getListView());
                //codice prova  per check
               //  ListView list = getListView();

                //getListView().setItemsCanFocus(false);
                 //getListView().setOnItemClickListener(this);
                 getListView().setChoiceMode(ListView.CHOICE_MODE_MULTIPLE);
                 getListView().getCheckedItemPositions();
                 setListAdapter(adapter);
                 //getListView().getCheckedItemIds();
                //fine cod per check
                 
        }

       
        @Override
        protected void onStart() {
                super.onStart();
                updateListView();
        }
       
        @Override
        protected void onStop() {
                super.onStop();
                // Liberiamo le risorse del cursor
                cursor.deactivate();
        }      

        @Override
        protected void onDestroy() {
                super.onDestroy();
                // Chiudiamo il cursore
                cursor.close();
                // Chiudiamo il DB
                db.close();
        }
       
        @Override
        public boolean onCreateOptionsMenu(Menu menu) {
                // L'unico possibile menu e' quello di creazione per cui non serve
                // fare controlli
                menu.add(Menu.FIRST, Menu.FIRST, Menu.FIRST, R.string.create_option);
                // Lo visualizziamo
                return true;
        }

        @Override
        public boolean onOptionsItemSelected(MenuItem item) {
                // Dobbiamo gestire l'Intent in questo modo perchè lo dobbiamo
                // eseguire con o startActivityForResult e non semplicemente come
                // Intent
                Intent createIntent = new Intent(this, EditTeamActivity.class);
                startActivityForResult(createIntent, CREATE_ACTIVITY_RESULT);
                return true;
        }

        @Override
        public void onCreateContextMenu(ContextMenu menu, View v,
                        ContextMenuInfo menuInfo) {
                // Creiamo il Menu da associare all'item
                int group = Menu.FIRST;
                menu.add(group, DELETE_MENU_OPTION, Menu.FIRST, R.string.delete_option);
                menu.add(group, UPDATE_MENU_OPTION, Menu.FIRST + 1,
                                R.string.update_option);
        }

        @Override
        public boolean onContextItemSelected(MenuItem item) {
                AdapterContextMenuInfo info = (AdapterContextMenuInfo) item
                                .getMenuInfo();
                long teamId = info.id;
                switch (item.getItemId()) {
                case DELETE_MENU_OPTION:
                        // Lo cancelliamo
                        db = dbHelper.getWritableDatabase();
                        db.delete("TEAM", "_id=" + teamId, null);
                        // Aggiorniamo
                        updateListView();
                        return true;
                case UPDATE_MENU_OPTION:
                        // Dobbiamo inviarel'Intent con il Team alla Activity per
                        // l'editazione
                        Cursor tmpCursor = db.query(TeamMetaData.TABLE_NAME,
                                        TeamMetaData.COLUMNS, "_id=" + teamId, null, null, null,
                                        null);
                        if (tmpCursor.moveToNext()) {
                                Intent updateIntent = new Intent(this, EditTeamActivity.class);
                                Bundle teamBundle = new Bundle();
                                Team team = new Team();
                                team.id = teamId;
                                team.nome = tmpCursor.getString(tmpCursor
                                                .getColumnIndex(TeamMetaData.NOME));
                                team.quantita = tmpCursor.getString(tmpCursor
                                                .getColumnIndex(TeamMetaData.QUANTITA));
                                team.prezzo = tmpCursor.getString(tmpCursor
                                                .getColumnIndex(TeamMetaData.PREZZO));
                                team.negozio = tmpCursor.getString(tmpCursor
                                                .getColumnIndex(TeamMetaData.NEGOZIO));
                                teamBundle.putParcelable("team", team);
                                updateIntent.putExtra("team", teamBundle);
                                startActivityForResult(updateIntent, UPDATE_ACTIVITY_RESULT);
                        }
                        return true;
                default:
                        return super.onContextItemSelected(item);
                }
        }

        @Override
        protected void onActivityResult(int requestCode, int resultCode, Intent data) {
                switch (resultCode) {
                case Activity.RESULT_OK:
                        // Salviamo il risultato nel DB
                        Bundle extra = data.getBundleExtra("team");
                        Team team = (Team) extra.getParcelable("team");
                        // Li inseriamo nel DB
                        ContentValues values = new ContentValues();
                        values.put(TeamMetaData.NOME, team.nome);
                        values.put(TeamMetaData.QUANTITA, team.quantita);
                        values.put(TeamMetaData.PREZZO, team.prezzo);
                        values.put(TeamMetaData.NEGOZIO, team.negozio);
                        db = dbHelper.getWritableDatabase();
                        // A seconda del tipo di risposta facciamo un inserimento o un
                        // update
                        switch (requestCode) {
                        case CREATE_ACTIVITY_RESULT:
                                db.insert("TEAM", "negozio", values);
                                break;
                        case UPDATE_ACTIVITY_RESULT:
                                db.update("TEAM", values, "_id="+team.id, null);
                                break;
                        default:
                                break;
                        }
                default:
                        break;
                }
        }

        /*
         * Metodo di utilità che permettedi aggiornare il contenuto della ListView
         */

        private void updateListView() {
                // Diciamo al Cursor di rieseguire la query
                cursor.requery();
                // Notifichiamo le View associte agli adapter di fare il refresh
                adapter.notifyDataSetChanged();
        }

        private final SQLiteOpenHelper dbHelper = new SQLiteOpenHelper(this,
                        "TEAM_DB", null, DB_VERSION) {

                @Override
                public void onCreate(SQLiteDatabase db) {
                        Log.i(TAG_LOG, "Inizio Creazione DB");
                        StringBuilder createQuery = new StringBuilder();
                        createQuery.append("CREATE TABLE \"TEAM\" (");
                        createQuery
                                        .append("           \"_id\" INTEGER PRIMARY KEY AUTOINCREMENT,");
                        createQuery.append("        \"nome\" TEXT NOT NULL,");
                        createQuery.append("        \"quantita\" TEXT NOT NULL,");
                        createQuery.append("        \"prezzo\" TEXT NOT NULL,");
                        createQuery.append("        \"negozio\" TEXT");
                        createQuery.append(")");
                        db.execSQL(createQuery.toString());
                }

                @Override
                public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
                        // Nope
                        Log.i(TAG_LOG, "Aggiornamento non implementato");
                }

        };
        @Override
        public void onPause() {
            super.onPause();
            save(checkBox1.isChecked());
        }

        private void save(final boolean isChecked) {
            SharedPreferences sharedPreferences = getPreferences(Context.MODE_PRIVATE);
            SharedPreferences.Editor editor = sharedPreferences.edit();
            editor.putBoolean("check", isChecked);
            editor.commit();
        }
        @Override
        public void onResume() {
            super.onResume();
            checkBox1.setChecked(load());
        }

        private boolean load() {
            SharedPreferences sharedPreferences = getPreferences(Context.MODE_PRIVATE);
            return sharedPreferences.getBoolean("check", false);
        }
}
oggi ho provato a vedere come implementare l'on save e on restore , nel codice non ho nessun errore , in debug invece il logcat mi da questo appena clicco sul pulsante che dovrebbe far partire l'activity inerente la lista
Codice: [Seleziona]
10-07 18:09:48.422: WARN/dalvikvm(357): threadid=1: thread exiting with uncaught exception (group=0x4001d800)
10-07 18:09:48.433: ERROR/AndroidRuntime(357): FATAL EXCEPTION: main
10-07 18:09:48.433: ERROR/AndroidRuntime(357): java.lang.RuntimeException: Unable to resume activity {it.android.pelli.ecovolantini2it/it.android.pelli.ecovolantini2it.VediListaSpesa}: java.lang.NullPointerException
10-07 18:09:48.433: ERROR/AndroidRuntime(357):     at android.app.ActivityThread.performResumeActivity(ActivityThread.java:3128)
10-07 18:09:48.433: ERROR/AndroidRuntime(357):     at android.app.ActivityThread.handleResumeActivity(ActivityThread.java:3143)
10-07 18:09:48.433: ERROR/AndroidRuntime(357):     at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2684)
10-07 18:09:48.433: ERROR/AndroidRuntime(357):     at android.app.ActivityThread.access$2300(ActivityThread.java:125)
10-07 18:09:48.433: ERROR/AndroidRuntime(357):     at android.app.ActivityThread$H.handleMessage(ActivityThread.java:2033)
10-07 18:09:48.433: ERROR/AndroidRuntime(357):     at android.os.Handler.dispatchMessage(Handler.java:99)
10-07 18:09:48.433: ERROR/AndroidRuntime(357):     at android.os.Looper.loop(Looper.java:123)
10-07 18:09:48.433: ERROR/AndroidRuntime(357):     at android.app.ActivityThread.main(ActivityThread.java:4627)
10-07 18:09:48.433: ERROR/AndroidRuntime(357):     at java.lang.reflect.Method.invokeNative(Native Method)
10-07 18:09:48.433: ERROR/AndroidRuntime(357):     at java.lang.reflect.Method.invoke(Method.java:521)
10-07 18:09:48.433: ERROR/AndroidRuntime(357):     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:868)
10-07 18:09:48.433: ERROR/AndroidRuntime(357):     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:626)
10-07 18:09:48.433: ERROR/AndroidRuntime(357):     at dalvik.system.NativeStart.main(Native Method)
10-07 18:09:48.433: ERROR/AndroidRuntime(357): Caused by: java.lang.NullPointerException
10-07 18:09:48.433: ERROR/AndroidRuntime(357):     at it.android.pelli.ecovolantini2it.VediListaSpesa.onResume(VediListaSpesa.java:267)
10-07 18:09:48.433: ERROR/AndroidRuntime(357):     at android.app.Instrumentation.callActivityOnResume(Instrumentation.java:1149)
10-07 18:09:48.433: ERROR/AndroidRuntime(357):     at android.app.Activity.performResume(Activity.java:3823)
10-07 18:09:48.433: ERROR/AndroidRuntime(357):     at android.app.ActivityThread.performResumeActivity(ActivityThread.java:3118)
10-07 18:09:48.433: ERROR/AndroidRuntime(357):     ... 12 more

È 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 teskio

  • Moderatore globale
  • Utente normale
  • *****
  • Post: 387
  • Respect: +118
    • Github
    • Google+
    • Mostra profilo
    • Skullab
  • Dispositivo Android:
    Cubot GT99 / SurfTab Ventos 10.1
  • Play Store ID:
    Skullab Software
  • Sistema operativo:
    windows 7 / ubuntu 12.04
+1
Codice (Java): [Seleziona]
public void onResume() {
        super.onResume();
        checkBox1.setChecked(load());
}

checkBox1 è nullo perchè non è stato inizializzato.

Offline ALEX88-ANDR0!D

  • Utente normale
  • ***
  • Post: 173
  • The Special One
  • Respect: +13
    • Google+
    • droidev88
    • Mostra profilo
  • Dispositivo Android:
    HTC DESIRE HD
  • Sistema operativo:
    WINDOWS 7
0
Codice (Java): [Seleziona]
public void onResume() {
        super.onResume();
        checkBox1.setChecked(load());
}

checkBox1 è nullo perchè non è stato inizializzato.

ciao teskio , ho aggiunto
Codice (Java): [Seleziona]
checkBox1 = (CheckBox) findViewById(R.id.checkBox1);al codice
Codice (Java): [Seleziona]
mport it.android.pelli.ecovolantini2it.Team.TeamMetaData;
import android.app.Activity;
import android.app.ListActivity;
import android.content.ContentValues;
import android.content.Context;
import android.content.Intent;
import android.content.SharedPreferences;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteOpenHelper;
import android.os.Bundle;
import android.util.Log;
import android.view.ContextMenu;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.view.ContextMenu.ContextMenuInfo;
import android.widget.CheckBox;
import android.widget.Checkable;
import android.widget.CursorAdapter;
import android.widget.ListView;
import android.widget.SimpleCursorAdapter;
import android.widget.AdapterView.AdapterContextMenuInfo;


public class VediListaSpesa extends ListActivity  {
         private Checkable checkBox1;
       
        // Tag del Log
        private final static String TAG_LOG = "TeamManagerActivity";
        // Identificatore della versioe
        private final static int DB_VERSION = 1;
        // Identificatore del risultato di creazione
        private final static int CREATE_ACTIVITY_RESULT = 1;
        // Identificatore del risultato di update
        private final static int UPDATE_ACTIVITY_RESULT = 2;
        // Identificatore delle voci del Menu Contestuale
        private final static int DELETE_MENU_OPTION = 1;
        private final static int UPDATE_MENU_OPTION = 2;
        // Mapping tra i campi della tabella ed elementi del layout di riga
        private String[] FROMS = new String[] { TeamMetaData.NOME,
                        TeamMetaData.QUANTITA, TeamMetaData.PREZZO, TeamMetaData.NEGOZIO };
        private int[] TOS = new int[] { R.id.teamNome, R.id.teamQuantita,
                        R.id.teamPrezzo, R.id.teamNegozio };
        /*
         * Riferimento al DB
         */

        private SQLiteDatabase db;
        /*
         * Cursore dei risultati
         */

        private Cursor cursor;
        /*
         * Riferimento all'Adpater
         */

        private CursorAdapter adapter;

        /** Called when the activity is first created. */
        @Override
        public void onCreate(Bundle savedInstanceState) {
                super.onCreate(savedInstanceState);
                setContentView(R.layout.mainlista);
                       
                checkBox1 = (CheckBox) findViewById(R.id.checkBox1);

                // Otteniamo il riferimento al DB in lettura e scrittura
                db = dbHelper.getWritableDatabase();
                // Eseguiamo la query per estrarre tutte le informazioni dalla
                // tabella
                cursor = db.query(TeamMetaData.TABLE_NAME, TeamMetaData.COLUMNS, null,
                                null, null, null, null);
                // Creiamo un Adapter con il cursore
                adapter = new SimpleCursorAdapter(this, R.layout.row_layout, cursor,
                                FROMS, TOS);
                // Lo assegnamo alla ListView
                getListView().setAdapter(adapter);
                // Registriamo il Menu Contesuale
                registerForContextMenu(getListView());
                //codice prova  per check
               //  ListView list = getListView();

                //getListView().setItemsCanFocus(false);
                 //getListView().setOnItemClickListener(this);
                 getListView().setChoiceMode(ListView.CHOICE_MODE_MULTIPLE);
                 getListView().getCheckedItemPositions();
                 setListAdapter(adapter);
                 //getListView().getCheckedItemIds();
                //fine cod per check
                 
        }

       
        @Override
        protected void onStart() {
                super.onStart();
                updateListView();
        }
       
        @Override
        protected void onStop() {
                super.onStop();
                // Liberiamo le risorse del cursor
                cursor.deactivate();
        }      

        @Override
        protected void onDestroy() {
                super.onDestroy();
                // Chiudiamo il cursore
                cursor.close();
                // Chiudiamo il DB
                db.close();
        }
       
        @Override
        public boolean onCreateOptionsMenu(Menu menu) {
                // L'unico possibile menu e' quello di creazione per cui non serve
                // fare controlli
                menu.add(Menu.FIRST, Menu.FIRST, Menu.FIRST, R.string.create_option);
                // Lo visualizziamo
                return true;
        }

        @Override
        public boolean onOptionsItemSelected(MenuItem item) {
                // Dobbiamo gestire l'Intent in questo modo perchè lo dobbiamo
                // eseguire con o startActivityForResult e non semplicemente come
                // Intent
                Intent createIntent = new Intent(this, EditTeamActivity.class);
                startActivityForResult(createIntent, CREATE_ACTIVITY_RESULT);
                return true;
        }

        @Override
        public void onCreateContextMenu(ContextMenu menu, View v,
                        ContextMenuInfo menuInfo) {
                // Creiamo il Menu da associare all'item
                int group = Menu.FIRST;
                menu.add(group, DELETE_MENU_OPTION, Menu.FIRST, R.string.delete_option);
                menu.add(group, UPDATE_MENU_OPTION, Menu.FIRST + 1,
                                R.string.update_option);
        }

        @Override
        public boolean onContextItemSelected(MenuItem item) {
                AdapterContextMenuInfo info = (AdapterContextMenuInfo) item
                                .getMenuInfo();
                long teamId = info.id;
                switch (item.getItemId()) {
                case DELETE_MENU_OPTION:
                        // Lo cancelliamo
                        db = dbHelper.getWritableDatabase();
                        db.delete("TEAM", "_id=" + teamId, null);
                        // Aggiorniamo
                        updateListView();
                        return true;
                case UPDATE_MENU_OPTION:
                        // Dobbiamo inviarel'Intent con il Team alla Activity per
                        // l'editazione
                        Cursor tmpCursor = db.query(TeamMetaData.TABLE_NAME,
                                        TeamMetaData.COLUMNS, "_id=" + teamId, null, null, null,
                                        null);
                        if (tmpCursor.moveToNext()) {
                                Intent updateIntent = new Intent(this, EditTeamActivity.class);
                                Bundle teamBundle = new Bundle();
                                Team team = new Team();
                                team.id = teamId;
                                team.nome = tmpCursor.getString(tmpCursor
                                                .getColumnIndex(TeamMetaData.NOME));
                                team.quantita = tmpCursor.getString(tmpCursor
                                                .getColumnIndex(TeamMetaData.QUANTITA));
                                team.prezzo = tmpCursor.getString(tmpCursor
                                                .getColumnIndex(TeamMetaData.PREZZO));
                                team.negozio = tmpCursor.getString(tmpCursor
                                                .getColumnIndex(TeamMetaData.NEGOZIO));
                                teamBundle.putParcelable("team", team);
                                updateIntent.putExtra("team", teamBundle);
                                startActivityForResult(updateIntent, UPDATE_ACTIVITY_RESULT);
                        }
                        return true;
                default:
                        return super.onContextItemSelected(item);
                }
        }

        @Override
        protected void onActivityResult(int requestCode, int resultCode, Intent data) {
                switch (resultCode) {
                case Activity.RESULT_OK:
                        // Salviamo il risultato nel DB
                        Bundle extra = data.getBundleExtra("team");
                        Team team = (Team) extra.getParcelable("team");
                        // Li inseriamo nel DB
                        ContentValues values = new ContentValues();
                        values.put(TeamMetaData.NOME, team.nome);
                        values.put(TeamMetaData.QUANTITA, team.quantita);
                        values.put(TeamMetaData.PREZZO, team.prezzo);
                        values.put(TeamMetaData.NEGOZIO, team.negozio);
                        db = dbHelper.getWritableDatabase();
                        // A seconda del tipo di risposta facciamo un inserimento o un
                        // update
                        switch (requestCode) {
                        case CREATE_ACTIVITY_RESULT:
                                db.insert("TEAM", "negozio", values);
                                break;
                        case UPDATE_ACTIVITY_RESULT:
                                db.update("TEAM", values, "_id="+team.id, null);
                                break;
                        default:
                                break;
                        }
                default:
                        break;
                }
        }

        /*
         * Metodo di utilità che permettedi aggiornare il contenuto della ListView
         */

        private void updateListView() {
                // Diciamo al Cursor di rieseguire la query
                cursor.requery();
                // Notifichiamo le View associte agli adapter di fare il refresh
                adapter.notifyDataSetChanged();
        }

        private final SQLiteOpenHelper dbHelper = new SQLiteOpenHelper(this,
                        "TEAM_DB", null, DB_VERSION) {

                @Override
                public void onCreate(SQLiteDatabase db) {
                        Log.i(TAG_LOG, "Inizio Creazione DB");
                        StringBuilder createQuery = new StringBuilder();
                        createQuery.append("CREATE TABLE \"TEAM\" (");
                        createQuery
                                        .append("           \"_id\" INTEGER PRIMARY KEY AUTOINCREMENT,");
                        createQuery.append("        \"nome\" TEXT NOT NULL,");
                        createQuery.append("        \"quantita\" TEXT NOT NULL,");
                        createQuery.append("        \"prezzo\" TEXT NOT NULL,");
                        createQuery.append("        \"negozio\" TEXT");
                        createQuery.append(")");
                        db.execSQL(createQuery.toString());
                }

                @Override
                public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
                        // Nope
                        Log.i(TAG_LOG, "Aggiornamento non implementato");
                }

        };
        @Override
        public void onPause() {
            super.onPause();
            save(checkBox1.isChecked());
        }

        private void save(final boolean isChecked) {
            SharedPreferences sharedPreferences = getPreferences(Context.MODE_PRIVATE);
            SharedPreferences.Editor editor = sharedPreferences.edit();
            editor.putBoolean("check", isChecked);
            editor.commit();
        }
        @Override
        public void onResume() {
            super.onResume();
            checkBox1.setChecked(load());
        }

        private boolean load() {
            SharedPreferences sharedPreferences = getPreferences(Context.MODE_PRIVATE);
            return sharedPreferences.getBoolean("check", false);
        }
}
, putroppo il logcat mi da ancora errore
Codice: [Seleziona]
10-08 15:59:50.732: WARN/dalvikvm(398): threadid=1: thread exiting with uncaught exception (group=0x4001d800)
10-08 15:59:50.742: ERROR/AndroidRuntime(398): FATAL EXCEPTION: main
10-08 15:59:50.742: ERROR/AndroidRuntime(398): java.lang.RuntimeException: Unable to resume activity {it.android.pelli.ecovolantini2it/it.android.pelli.ecovolantini2it.VediListaSpesa}: java.lang.NullPointerException
10-08 15:59:50.742: ERROR/AndroidRuntime(398):     at android.app.ActivityThread.performResumeActivity(ActivityThread.java:3128)
10-08 15:59:50.742: ERROR/AndroidRuntime(398):     at android.app.ActivityThread.handleResumeActivity(ActivityThread.java:3143)
10-08 15:59:50.742: ERROR/AndroidRuntime(398):     at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2684)
10-08 15:59:50.742: ERROR/AndroidRuntime(398):     at android.app.ActivityThread.access$2300(ActivityThread.java:125)
10-08 15:59:50.742: ERROR/AndroidRuntime(398):     at android.app.ActivityThread$H.handleMessage(ActivityThread.java:2033)
10-08 15:59:50.742: ERROR/AndroidRuntime(398):     at android.os.Handler.dispatchMessage(Handler.java:99)
10-08 15:59:50.742: ERROR/AndroidRuntime(398):     at android.os.Looper.loop(Looper.java:123)
10-08 15:59:50.742: ERROR/AndroidRuntime(398):     at android.app.ActivityThread.main(ActivityThread.java:4627)
10-08 15:59:50.742: ERROR/AndroidRuntime(398):     at java.lang.reflect.Method.invokeNative(Native Method)
10-08 15:59:50.742: ERROR/AndroidRuntime(398):     at java.lang.reflect.Method.invoke(Method.java:521)
10-08 15:59:50.742: ERROR/AndroidRuntime(398):     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:868)
10-08 15:59:50.742: ERROR/AndroidRuntime(398):     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:626)
10-08 15:59:50.742: ERROR/AndroidRuntime(398):     at dalvik.system.NativeStart.main(Native Method)
10-08 15:59:50.742: ERROR/AndroidRuntime(398): Caused by: java.lang.NullPointerException
10-08 15:59:50.742: ERROR/AndroidRuntime(398):     at it.android.pelli.ecovolantini2it.VediListaSpesa.onResume(VediListaSpesa.java:270)
10-08 15:59:50.742: ERROR/AndroidRuntime(398):     at android.app.Instrumentation.callActivityOnResume(Instrumentation.java:1149)
10-08 15:59:50.742: ERROR/AndroidRuntime(398):     at android.app.Activity.performResume(Activity.java:3823)
10-08 15:59:50.742: ERROR/AndroidRuntime(398):     at android.app.ActivityThread.performResumeActivity(ActivityThread.java:3118)
10-08 15:59:50.742: ERROR/AndroidRuntime(398):     ... 12 more
10-08 15:59:50.752: WARN/ActivityManager(60):   Force finishing activity it.android.pelli.ecovolantini2it/.VediListaSpesa
È 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 !