2012-12-13 18 views
5

Bir SimpleCursorAdapter ile bir ListView var, bir veritabanından bilgi yüklemek, onlongclicklistener veritabanından bir öğeyi silmek istiyorum, iyi çalışıyor, ancak liste yenilemez, listView ile çalıştı. refreshDrawableState(); ve ben cevap olarak buldum ama hiçbir eserde diğer bazı yöntemler, bu benim onCreate fonksiyonudur:yenilemek ListView veritabanından silindikten sonra

public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.layout_act); 
    imzero = (ImageView)findViewById (R.id.iv_zero_pers); 
    tvzero = (TextView)findViewById (R.id.tv_zero_pers); 
    dbConnector = new DatabaseConnectorrso(MyListActivity.this); 
    dbConnector.checkCursor(); 
    if (DatabaseConnector.de)//check if database is emplty 
    { 
    try{     
     dbConnector.open();    
     dbConnector.load();//load information from database 
     dbConnector.close(); 
     imzero.setVisibility(View.GONE); 
     tvzero.setVisibility(View.GONE); 
    } 
    catch(Exception ex) { 
     ex.printStackTrace(); 
     dbConnector.close(); 
    } 
    conAdapter =(new ImageAndTextAdapter(MyListActivity.this, 
      R.layout.meniu_lista_element, null, null, null)); 
    setListAdapter(conAdapter); 
    } 
    else{ 
     dbConnector.close(); 
     imzero.setVisibility(View.VISIBLE); 
     tvzero.setVisibility(View.VISIBLE); 
    } 

ve deneyin bu

listView.setOnItemLongClickListener(new OnItemLongClickListener() { 
     @Override 
     public boolean onItemLongClick(AdapterView<?> parent, View view, int position, long id) { 
      deleteDialog(Integer.parseInt (DatabaseConnector.id.get(position))); //delete from database 
      dbConnector.checkCursor(); 
      if (DatabaseConnector.de) 
      { 
      try{     
       dbConnector.open();    
       dbConnector.loadPersoane(); 
       listView.refreshDrawableState(); 
       dbConnector.close(); 
       imzero.setVisibility(View.GONE); 
       tvzero.setVisibility(View.GONE); 
      } 
      catch(Exception ex) { 
       ex.printStackTrace(); 
       dbConnector.close(); 
      } 
      conAdapter =(new ImageAndTextAdapter(AltePersoane.this, 
        R.layout.meniu_lista_element, null, null, null)); 
      setListAdapter(conAdapter); 
      } 
      else{ 
       dbConnector.close(); 
       imzero.setVisibility(View.VISIBLE); 
       tvzero.setVisibility(View.VISIBLE); 
      } 

      return true; 
     } 
    }); 
+0

Requery veritabanı çalışabilir , yeni imleci alın ve daha sonra –

cevap

1

gibi listesini yenilemek için çalıştı

yourAdapter.notifyDataSetChanged(); 

veya

yourAdapter.getCursor().requery(); 

Güncelleme:

Sana yanlış bir şey yaptığını düşünüyorum, şunu deneyin:

listView.setOnItemLongClickListener(new OnItemLongClickListener() { 
    @Override 
    public boolean onItemLongClick(AdapterView<?> parent, View view, int position, long id) { 
     deleteDialog(Integer.parseInt (DatabaseConnector.id.get(position))); //delete from database 
     dbConnector.checkCursor(); 
     if (DatabaseConnector.de) 
     { 
     try{     
      dbConnector.open();    
      dbConnector.loadPersoane(); 
           //Removed 
      dbConnector.close(); 
      imzero.setVisibility(View.GONE); 
      tvzero.setVisibility(View.GONE); 
     } 
     catch(Exception ex) { 
      ex.printStackTrace(); 
      dbConnector.close(); 
     } 
     conAdapter.notifyDataSetChanged(); 
     } 
     else{ 
      dbConnector.close(); 
      imzero.setVisibility(View.VISIBLE); 
      tvzero.setVisibility(View.VISIBLE); 
     } 

     return true; 
    } 
}); 
+0

liste görünümünde değiştirilen veri kümesini bildirme Bu satırı setListAdapter'den önce yazmalı mıyım? –

+0

Bağdaştırıcıyı yeniden ayarlamanız gerekmez. Bu satırları kaldırın. – ThePCWizard

+0

bunu sil –

-1

aynı şekilde aktivitesinden niyet etkinliğe denemeydi o

Intent i = new Intent (MyActivity.this,MyActivity.class); 
    startActivity (i); 
+1

onun tekrar tekrar faaliyete geçmesini ... Bunu defalarca yaparsam o zaman ?? Lütfen bu tür şeyleri önermeyin. –

+0

ama işe yarıyor, başka bir fikrin var mı? –

+0

evet, arama amacı olmadan bunu yapmanın birçok yolu var. çağrı silindikten sonra onCreate(); yöntem niyetle aynı şeyi yapacaktır. ikinci yol kontrolün altında PCWizard'ın cevabı. İmleç ll otomatik olarak aynı şeyi yapıyor. –

İlgili konular