2012-12-13 27 views
5

Tôi có ListView với SimpleCursorAdapter, nó tải thông tin từ cơ sở dữ liệu, tôi muốn onlongclicklistener xóa một mục khỏi cơ sở dữ liệu, nó hoạt động tốt, nhưng danh sách không làm mới, tôi đã thử với listView. refreshDrawableState(); và một số phương pháp khác mà tôi tìm thấy là câu trả lời nhưng việc không có ai, đây là chức năng onCreate của tôi:Làm mới ListView sau khi xóa khỏi cơ sở dữ liệu

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

và tôi đã cố gắng để cập nhật danh sách như thế này

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 cơ sở dữ liệu , có được con trỏ mới và sau đó làm thông báo tập dữ liệu thay đổi trên listview –

Trả lời

1

Hãy thử

yourAdapter.notifyDataSetChanged(); 

hoặc

yourAdapter.getCursor().requery(); 

Cập nhật:

Tôi nghĩ rằng bạn đang làm gì đó sai, hãy thử này:

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

Tôi phải viết dòng này trước khi setListAdapter? –

+0

bạn không phải đặt lại bộ điều hợp. Loại bỏ những dòng đó. – ThePCWizard

+0

viết sau khi xóa –

-1

cố gắng để hoạt động ý định từ hoạt động của bạn đến cùng, nó có thể làm việc

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

gọi lại hoạt động của bạn một lần nữa ... nếu tôi làm điều này nhiều lần thì ?? Vui lòng không đề xuất loại nội dung này. –

+0

nhưng nó hoạt động, bạn có ý tưởng nào khác không? –

+0

có nhiều cách để thực hiện điều này mà không có mục đích gọi. sau khi xóa cuộc gọi onCreate(); phương pháp nó sẽ làm điều tương tự mà không có ý định. cách thứ hai là dưới đây kiểm tra câu trả lời của ThePCWizard. Con trỏ sẽ tự động làm điều tương tự. –

Các vấn đề liên quan