2011-12-29 15 views
8

questa domanda è simile a questa - Android - Listview delete item and Refresh.Listview Elimina oggetto e Aggiorna - android

non posso rinfrescare il mio adattatore con:

adapter.notifyDataSetChanged(); 

ho provato:

adapter.remove(adapter.getItem(pos)); 

ma senza successo, solo una volta (strano ...).

c'è un'altra risposta c'è:

Call that Activity once again Using Intent 

sombody può darmi il codice esatto per questo (o per l'adattatore/cursore)?

Sto provando questo per un paio d'ore senza successo.

il mio codice completo:

protected void onCreate (Bundle SavedInstanceState) { 


    super.onCreate(SavedInstanceState); 
    setContentView(R.layout.personalmessageview); 

    headtitle= getIntent().getExtras().getString("head"); 

    setTitle(headtitle); 


    personalresults = getIntent().getExtras().getStringArrayList("personalres"); 
    personalresultswithtime = getIntent().getExtras().getStringArrayList("personalrestime"); 



    // setListAdapter(new ArrayAdapter<String>(this, android.R.layout.simple_list_item_1,personalresults)); 

    ListView list = (ListView)findViewById(R.id.listview_personal);  
    // ArrayAdapter<String> adapter = new ArrayAdapter<String>(this, android.R.layout.simple_list_item_1, personalresults); 
    list.setAdapter(adapter); 
    registerForContextMenu(list); 


    list.setOnItemLongClickListener(new AdapterView.OnItemLongClickListener() { 
      public boolean onItemLongClick(AdapterView<?> av, View v, int pos, long id) { 


       String time = personalresultswithtime.get(pos).toString(); 


        Show_Alert_box(v.getContext(),"Please select action.",time,pos); 


       return true; 
      } 
     }); 

pubblico Show_Alert_box void (contesto Context, String message, il tempo stringa, int position) finale timestamp String = tempo;

   final int pos = position; 

      final AlertDialog alertDialog = new AlertDialog.Builder(context).create(); 
       alertDialog.setTitle(getString(R.string.app_name)); 
       alertDialog.setButton("Delete", new DialogInterface.OnClickListener() { 
        public void onClick(DialogInterface dialog, int which) { 

         try 
         { 
          db = databaseHelper.getWritableDatabase(); 


          db.delete("messages","timestamp" + "=?", new String[] { timestamp }); 

          Log.d("DB"," delete! "); 

          ArrayAdapter<String> adapter = new ArrayAdapter<String>(PersonalMessageView.this, android.R.layout.simple_list_item_1, personalresults); 


            adapter.remove(adapter.getItem(pos)); //not working t all! why ? 

          list.notify(); 
          list.invalidate(); 


          personalresults.remove(pos); 
          personalresultswithtime.remove(pos); 

          adapter.notifyDataSetChanged(); 

          db.close(); 




         } 
         catch(Exception e) 
         { 

         } 
       } }); 
       alertDialog.setButton2("Cancel", new DialogInterface.OnClickListener() { 
        public void onClick(DialogInterface dialog, int which) { 
         alertDialog.dismiss(); 
       } }); 

       alertDialog.setMessage(message); 
       alertDialog.show(); 

}

+0

dalla scheda e quindi notificare la data fissata chaged –

+0

Cosa stai usando per la scheda? cioè un ArrayAdapter o BaseAdapter o una classe derivata da una di quelle? –

+0

iv'e aggiunto il codice. per favore controlla di nuovo – Smoker09

risposta

3

invalidare la lista Visualizza dopo la modifica dei dati, all'interno del vostro ListActivity utilizzare le seguenti righe quando i dati vengono modificati

getListView().invalidate(); 
+0

non funziona ... puoi controllare il mio codice? – Smoker09

2

funzione di marca per legare l'adattatore con ListView e basta chiamare di nuovo quella funzione mentre l'eliminazione è stata completata in modo che Listview si riempisse di nuovo e tu ricevessi l'elenco aggiornato.
Usi il database?

+0

sì sto usando db. controlla il mio codice aggiunto. carri armati! – Smoker09

2

provare a utilizzare listview.invalidateViews(); dopo adapter.remove(adapter.getItem(pos));

+0

ancora non funziona. carri armati. – Smoker09

6

Prova

adapter.remove(adapter.getItem(pos)); 
notifyDataSetChanged(); 
+0

non funziona :) puoi controllare il mio codice? >>> – Smoker09

+0

il mio adattatore non ha nemmeno la funzione di rimozione –

0
public class Listview_cls extends Activity implements OnItemClickListener{ 
      ListView lv; 
      String items[]= {"Kolkata","Delhi","Mumbai","Pune"}; 
      ArrayAdapter adp; 
      public void onCreate(Bundle savedInstanceState) 
      { 
      super.onCreate(savedInstanceState); 
      setContentView(R.layout.main); 

      arr = new ArrayList(); 
      lv = (ListView) findViewById (R.id.ListView01); 
      for(int i=0; i<items.length; i++) 
      { 
       arr.add(items[i]); 
      } 
     adp = new ArrayAdapter<String>(this, android.R.layout.simple_list_item_1, arr); 
     lv.setAdapter(adp); 
     lv.setOnItemClickListener(this); 
    } 


    public void onItemClick(AdapterView<?> arg0, View arg1, int arg2,long arg3) 
    {  

    adp.remove(adp.getItem(arg2)); 
     adp.notifyDataSetChanged(); 

    } 
} 
2

è necessario aggiornare i cambiamenti nel vostro DB quindi si aggiorna il tuo ArrayList (con un requery o qualcosa di simile dal momento che è deprecato) poi devi chiamare adapter.notifyDataSetChanged();

6

Probabilmente ce l'ha risolto, ma solo nel caso in cui nessun altro ha lo stesso problema, qui è la mia soluzione:

ArrayAdapter<String> myAdapter = (ArrayAdapter<String>)getListView().getAdapter(); 
myAdapter.remove(myAdapter.getItem(info.position)); 
myAdapter.notifyDataSetChanged(); 

Il problema era che non hai avuto l'adattatore della tua lista.

+0

ha funzionato per me. Grazie. – Si8

0
@Override 
    public boolean onContextItemSelected(MenuItem item) { 
     AdapterContextMenuInfo info = (AdapterContextMenuInfo) item.getMenuInfo();  
     int position = info.position; 
     favouriteReportList d; 
     d= array_list.get(position); 
     switch (item.getItemId()) { 
      case R.id.connect:    
       return true; 
      case R.id.mark: 
       return true; 
      case R.id.delete:   
       myFavReport = new DBhandlerReport(this); 
       myFavReport.deleteMyFavReport(d.getReportName(), d.getPathName(), myUrl); 
       myFavReport.close(); 
// arrarAdapter is an object of your class. 
       arrayAdapter.remove(arrayAdapter.getItem(info.position)); 
       arrayAdapter.notifyDataSetChanged(); 
       return true;     
      default: 
       return super.onContextItemSelected(item); 
     } 
    } 
-1

Prova Questo Articolo Rimuovi

Intent intent= getIntent(); 
      finish(); 
      startActivity(intent); 
Problemi correlati