2012-12-13 42 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的答案。光标会自动做同样的事情。 –

相关问题