2012-12-13 12 views
5

SimpleCursorAdapterを持つリストビューを持っています。データベースから情報をロードします。データベースからアイテムを削除するにはonlongclicklistenerが必要ですが、正常に動作しますがリストはリフレッシュされません。 refreshDrawableState();そして、私は答えとして見つかりましたが、誰も働かない他のいくつかの方法が、これは私のonCreate機能です:refreshリストビューをデータベースから削除した後

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

のRequeryデータベースを動作することができます、新しいカーソルを取得し、リストビューで変更されたデータセットを通知します –

答えて

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();方法それは意図なしに同じことをします。 2番目の方法は、ThePCWizardの答えを確認することです。カーソルは自動的に同じことをします。 –

関連する問題