CERCA
PER MODELLO
FullScreen Chatbox! :)

Utente del giorno: bluemask con ben 1 Thanks ricevuti nelle ultime 24 ore
Utente della settimana: bluemask con ben 2 Thanks ricevuti negli ultimi sette giorni
Utente del mese: megthebest con ben 28 Thanks ricevuti nell'ultimo mese

Visualizzazione dei risultati da 1 a 5 su 5
Discussione:

listview si aggiorna in modo anomalo

Se questa discussione ti è stata utile, ti preghiamo di lasciare un messaggio di feedback in modo che possa essere preziosa in futuro anche per altri utenti come te!
  1. #1
    Baby Droid


    Registrato dal
    Jul 2015
    Messaggi
    49

    Ringraziamenti
    4
    Ringraziato 2 volte in 2 Posts
    Predefinito

    listview si aggiorna in modo anomalo

    salve, questo è il mio codice
     
    1
    2
    public class MainActivity extends AppCompatActivity {
    3
                    //Vatiabili Globali
    4
        DbHelper helper =new DbHelper(this);
    5
        SQLiteDatabase db;
    6
        ListView listView;
    7
        Intent intent; // x passare i dati tra activity
    8
        Map<Integer, myCustomObject> listp = new TreeMap<>();
    9
        Adapter_MainActivity adapter_MainActivity;
    10
    11
        @<a rel="nofollow" href="https://www.androidiani.com/forum/members/override.html" target="_blank">Override</a>
    12
        protected void onCreate(Bundle savedInstanceState) {
    13
            super.onCreate(savedInstanceState);
    14
            setContentView(R.layout.activity_main);
    15
                        //variabili
    16
            Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);
    17
            setSupportActionBar(toolbar);
    18
            //  getSupportActionBar().setTitle(R.string.app_name);     //Titolo In Toolbar
    19
            db= helper.getReadableDatabase();//sola lettura x fare query
    20
            listView = (ListView) findViewById(R.id.listView);
    21
            listView.setFastScrollEnabled(true);
    22
            //metodo (visualizza tutti i contatori presenti in tabella contatore)
    23
            Aggiornare();
    24
    25
            //click listView(inserisci in nome il valore dell item cliccato.. tramite una query si ottiene l'id.. passo i dati(id e nome) in contatore
    26
            listView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
    27
                public void onItemClick(AdapterView<?> arg0, View v, int position, long arg3) {
    28
                    v.setBackgroundColor(0x8BC7DB); //colore item
    29
                     TextView lblListHeader = (TextView) v.findViewById(R.id.textViewList);
    30
                      String nome = lblListHeader.getText().toString();
    31
                        String[] selectionArg = {nome};
    32
                        Cursor g = db.rawQuery("SELECT _id FROM contatore WHERE titolo = ?", selectionArg);
    33
                            while (g.moveToNext()) {
    34
                                  //dati da passare (nome e id della riga premuta) a Contatore
    35
                                 String id = g.getString(0);//id
    36
                                 intent = new Intent(getApplicationContext(), Contatore.class);
    37
                                 String Salsiccia = getPackageName();
    38
                                 intent.putExtra(Salsiccia + ".myString", nome);      //inseriamo i dati nell'intent
    39
                                intent.putExtra(Salsiccia + ".myInt", id);
    40
                                 startActivity(intent); //facciamo partire la seconda activity
    41
                                                     }}});
    42
    43
            //click lungo listView(inserisci in nome il valore dell item cliccato.. tramite una query si ottiene l'id..e chiede se cancellare quel nome dalle tabelle
    44
            listView.setOnItemLongClickListener(new AdapterView.OnItemLongClickListener() {
    45
                @<a rel="nofollow" href="https://www.androidiani.com/forum/members/override.html" target="_blank">Override</a>
    46
                public boolean onItemLongClick(AdapterView<?> parent, View view, int position, long id) {
    47
                    TextView lblListHeader = (TextView) view.findViewById(R.id.textViewList);
    48
                    final String nome = lblListHeader.getText().toString();
    49
                    final AlertDialog.Builder adb = new AlertDialog.Builder(MainActivity.this);
    50
                    adb.setTitle("Elimina:");
    51
                    adb.setMessage("Sei sicuro di voler eliminare " + (nome) + " ?");
    52
                    adb.setNegativeButton("Annulla", null);
    53
                    adb.setPositiveButton("Ok", new AlertDialog.OnClickListener() {
    54
                        public void onClick(DialogInterface dialog, int which) {
    55
                            String[] selectionArg = {nome};
    56
                            Cursor g = db.rawQuery("SELECT _id FROM contatore WHERE titolo = ?", selectionArg);
    57
                            while (g.moveToNext()) {
    58
                                String id = g.getString(0);//id
    59
                                String table_name2 = "promemoria ";
    60
                                String where2 = "idcont=?";
    61
                                String[] whereArgs2 = {id};//id contatore premuto
    62
                                db.delete(table_name2, where2, whereArgs2);
    63
                            }
    64
                            String table_name = "contatore ";
    65
                            String where = "titolo=?";
    66
                            String[] whereArgs = {nome};
    67
                            db.delete(table_name, where, whereArgs);
    68
                            Aggiornare();
    69
                            //finish();
    70
                            //startActivity(getIntent());
    71
                        }
    72
                    });
    73
                    adb.show();
    74
                    return true;
    75
    76
                }//chiusura onItemLongClick
    77
            }); //chiusura setOnItemLongClickListener
    78
    79
    80
    81
            //entra in Activity Add
    82
            FloatingActionButton fab = (FloatingActionButton) findViewById(R.id.fab);
    83
            fab.setOnClickListener(new View.OnClickListener() {
    84
                @<a rel="nofollow" href="https://www.androidiani.com/forum/members/override.html" target="_blank">Override</a>
    85
                public void onClick(View view) {
    86
                    intent = new Intent(getApplicationContext(), Add.class)
    87
                            .addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
    88
                    startActivity(intent);  //Snackbar.make(view, "Contatore aggiunto con successo!", Snackbar.LENGTH_LONG) .setAction("Action", null).show();
    89
                    adapter_MainActivity.clear();
    90
                    Aggiornare();
    91
    92
                }
    93
            });
    94
    95
        }
    96
    97
        @<a rel="nofollow" href="https://www.androidiani.com/forum/members/override.html" target="_blank">Override</a>
    98
        protected void onRestart() {
    99
            super.onRestart();
    100
            Aggiornare();
    101
    102
        }
    103
    104
        public void Aggiornare(){
    105
            adapter_MainActivity = new Adapter_MainActivity(this, R.layout.row_principale, listp);
    106
            Cursor c = db.rawQuery("SELECT * FROM contatore",null);
    107
            c.moveToFirst();
    108
            if(c.getCount()==0){
    109
            }
    110
            else {
    111
                for (int i = 0; i < c.getCount(); i++) {
    112
                Cursor a = db.rawQuery("SELECT numero FROM promemoria WHERE idcont=?  ORDER BY _id DESC LIMIT 1", new String[]{c.getString(0)});
    113
                while (a.moveToNext()) {
    114
                    listp.put(i, new myCustomObject(c.getString(1), a.getInt(0)));
    115
                    c.moveToNext();
    116
                }
    117
                }
    118
                adapter_MainActivity.clear();
    119
                adapter_MainActivity.notifyDataSetChanged();
    120
                adapter_MainActivity.add(listp);
    121
               adapter_MainActivity.notifyDataSetChanged();
    122
                listView.setAdapter(adapter_MainActivity);
    123
    124
            }
    125
        }
    126
    }
    127


    dopo che cancello una riga con
    5
     
    1
    .....
    2
    listView.setOnItemLongClickListener(new AdapterView.OnItemLongClickListener() {
    3
                @<a rel="nofollow" href="https://www.androidiani.com/forum/members/override.html" target="_blank">Override</a>
    4
                public boolean onItemLongClick(AdapterView<?> parent, View view, int position, long id) {
    5
    .....


    nel db viene eliminata la riga ma sulla listview no..
    esempio nella listview ho
    paolo
    luca


    se elimino paolo ottengo
    luca
    luca

    come risolvo?

  2.  
  3. #2
    Androidiani Power User L'avatar di Crotan


    Registrato dal
    Jul 2013
    Località
    Roma
    Messaggi
    1,265
    Smartphone
    Redmi Note 9 Pro

    Ringraziamenti
    401
    Ringraziato 1,445 volte in 626 Posts
    Predefinito

    Gli effetti del notifyDataSetChanged() sono esibiti solo quando viene modificato anche l'ArrayList che passi all'adapter. Nel tuo caso, hai rimosso l'elemento dal database ma non da "listp". Non conosco (e non capisco perchè stai usando) l'oggetto Map per cui non so darti informazioni precise tuttavia esiste il metodo remove(Object object) per rimuovere da quella mappa l'oggetto passato come parametro; solo in seguito potrai chiamare il notifyDataSetChanged() ed apprezzarne gli effetti.

  4. #3
    Baby Droid


    Registrato dal
    Jul 2015
    Messaggi
    49

    Ringraziamenti
    4
    Ringraziato 2 volte in 2 Posts
    Predefinito

    H risolto usando listp. Clear()
    Grazie mille x il supporto

  5. #4
    Androidiani Power User L'avatar di Crotan


    Registrato dal
    Jul 2013
    Località
    Roma
    Messaggi
    1,265
    Smartphone
    Redmi Note 9 Pro

    Ringraziamenti
    401
    Ringraziato 1,445 volte in 626 Posts
    Predefinito

    Per quel che hai chiesto clear() non è la soluzione poiché questo metodo elimina tutto il contenuto della mappa e non soltanto quello relativo all'item che clicchi nella lista. Comunque, se dici di aver risolto, buon per te.

    Inviato dal mio Nexus 5 con Tapatalk 2

  6. #5
    Baby Droid


    Registrato dal
    Jul 2015
    Messaggi
    49

    Ringraziamenti
    4
    Ringraziato 2 volte in 2 Posts
    Predefinito

    Si.. XK m serve poi subito dopo ricaricarlo.. Dopo aver eseguito altri metodi

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire risposte
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Torna su
Privacy Policy