2011-12-29 34 views
8

esta pregunta es similar a esta - Android - Listview delete item and Refresh.Listview eliminar elemento y Actualizar - android

puedo restauro mi adaptador con:

adapter.notifyDataSetChanged(); 

me trataron:

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

pero sin éxito, sólo una vez (raro ...).

hay otra respuesta allí:

Call that Activity once again Using Intent 

sombody me puede dar el código exacto para este (o para el adaptador/cursor)?

Estoy intentando esto por un par de horas sin éxito.

mi código 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; 
      } 
     }); 

pública Show_Alert_box vacío (contexto Contexto, Mensaje de cadena, cadena de tiempo, posición int) última marca de tiempo String = tiempo;

   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

del adaptador y luego notificar a la fecha establecida chaged –

+0

¿Qué estás usando para su adaptador? es decir, un ArrayAdapter o BaseAdapter, o una clase que deriva de uno de esos? –

+0

iv'e agregó el código. por favor revíselo nuevamente. – Smoker09

Respuesta

3

Invalidar la vista de lista tras el cambio de datos, dentro de su ListActivity usar las siguientes líneas cuando se cambian los datos

getListView().invalidate(); 
+0

no funciona ... ¿puedes verificar mi código? – Smoker09

2

función de maquillaje para vincular a su adaptador con Listview y llamada simplemente nuevamente esa función mientras se completa la eliminación, de modo que Listview se llene nuevamente y obtenga una lista actualizada.
¿Está utilizando la base de datos?

+0

sí, estoy usando db. revisa mi código agregado. tanques! – Smoker09

2

tratar de usar listview.invalidateViews(); después adapter.remove(adapter.getItem(pos));

+0

aún no funciona. tanques. – Smoker09

6

Trate

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

no funciona :) ¿puedes verificar mi código? >>> – Smoker09

+0

mi adaptador ni siquiera tiene la función eliminar –

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

tiene que actualizar los cambios en su base de datos a continuación, actualice su ArrayList (con una nueva consulta o algo así, ya que está en desuso) entonces tienes que llamar a adapter.notifyDataSetChanged();

6

que probablemente le hayan resuelto, pero sólo en caso de que alguien más tiene el mismo problema, aquí está mi solución:

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

El problema era que no tenías el adaptador de la lista.

+0

Funcionó para mí. Gracias. – 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

Prueba este elemento remove

Intent intent= getIntent(); 
      finish(); 
      startActivity(intent); 
Cuestiones relacionadas