2012-12-13 76 views
5

我有一個ListView與SimpleCursorAdapter,它從數據庫加載信息,我想onlongclicklistener從數據庫中刪除一個項目,它工作正常,但列表不刷新,我試着用listView。 refreshDrawableState();而且,我發現作爲答案,但沒有一個人工作的一些其他的方法,這是我的onCreate功能:刷新ListView後從數據庫中刪除

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); 
    } 

,我試圖刷新列表這樣

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

再次查詢數據庫,得到新的光標,然後通知數據集在列表視圖 –

回答

1

嘗試

yourAdapter.notifyDataSetChanged(); 

yourAdapter.getCursor().requery(); 

更新

我認爲你做錯了什麼,試試這個:

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

我必須在setListAdapter之前寫這行? –

+0

您不必再次設置適配器。刪除這些線。 – ThePCWizard

+0

刪除後寫下這個 –

-1

嘗試從活動的目的相同的活動,它可以工作

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

其稱呼您的活動一次又一次...如果我做了這麼多次呢?請不要建議這種類型的東西。 –

+0

但它工作,你有另一個想法? –

+0

是的,有很多方法可以做到這一點,沒有打電話的意圖。刪除後調用onCreate();方法它會做同樣的事情沒有意圖。第二種方法是檢查ThePCWizard的答案。光標會自動做同樣的事情。 –

相關問題