2013-01-14 3 views
4

Android OS sqlite 데이터베이스에서 가져온 데이터를 표시하고 있습니다. 항목을 클릭하면 항목이 성공적으로 삭제됩니다. 그러나 나는 문제가 생기고, 또는 작업 후 목록보기를 업데이트하고 있습니다.삭제 작업 후 목록보기 업데이트

다음은 연락처를 삭제하는 코드입니다.

public void updateList(){ 
    myList.refreshDrawableState(); 
    myList.invalidateViews(); 
    this.notifyDataSetChanged(); 
} 

내가 세 가지 방법이 내가 새로 고치려고이 방법에 포함 그러나 아무도 나를 위해 일한 :

deleteBtn = (Button)v.findViewById(R.id.deleteBtn); 
    deleteBtn.setOnClickListener(new View.OnClickListener() { 

     @Override 
     public void onClick(View v) { 
      Toast.makeText(v.getContext(), "Deleted: " + c.getId() + " " + c.getName(), Toast.LENGTH_SHORT).show(); 
      adapter.deleteContact(c.getId()); 
      updateList(); 
     } 
    }); 

는 아래 updateList() 방법이다. 내가 어떻게 이걸 이룰 수 있겠 어?

편집 : 나는 내 코드이 해결책이 될 것이라고 생각을 변경하지만 중 하나가 작동하지 않았다 :

DbAdapter 클래스 삭제 방법() :

public boolean deleteContact(int rowId){ 
    getAllContactsList(); 
    return db.delete(DB_TABLE, COLUMN_ID + "=" + rowId, null) > 0; 

} 

getAllContactsList() :

public List<Contact> getAllContactsList(){ 
    List<Contact> contactList = new ArrayList(); 

    Cursor c = db.query(DB_TABLE, new String [] {COLUMN_ID, COLUMN_FNAME, COLUMN_LNAME}, null, null, null, null, null); 

    //loop through cursor rows and add to list 
    if(c.moveToFirst()){ 
     do{ 
      Contact contact = new Contact(); 
      contact.setId(Integer.parseInt(c.getString(0))); 
      contact.setfName(c.getString(1)); 
      contact.setlName(c.getString(2)); 
      contactList.add(contact); 
     }while(c.moveToNext()); 
    } 
    return contactList; 
}public List<Contact> getAllContactsList(){ 
    List<Contact> contactList = new ArrayList(); 

    Cursor c = db.query(DB_TABLE, new String [] {COLUMN_ID, COLUMN_FNAME, COLUMN_LNAME}, null, null, null, null, null); 

    //loop through cursor rows and add to list 
    if(c.moveToFirst()){ 
     do{ 
      Contact contact = new Contact(); 
      contact.setId(Integer.parseInt(c.getString(0))); 
      contact.setfName(c.getString(1)); 
      contact.setlName(c.getString(2)); 
      contactList.add(contact); 
     }while(c.moveToNext()); 
    } 
    return contactList; 
} 

연락처를 삭제하기 전에 새 커서를 가져 오는 것으로 생각하여 이에 따라 목록을 업데이트합니다. 불행히도 아무런 차이가 없었습니다. 어떤 아이디어?

답변

0

목록의 어댑터에 기본 데이터를 수정했음을 알리십시오.

adapter.notifyDataSetChanged();

+0

'this.notifyDataSetChanged()'로이 작업을 수행하고 있었지만 어떤 이유로 든 목록과 아무런 차이가 없었습니다! – Javacadabra

0

당신은 새 목록 다시 쿼리 및 및 생성해야 사용해보십시오 :

public void updateList(){ 
    clear(); 
    addAll(contactsDbHelper.getAllContactsList()); //addAll works since 11 API version. 
    notifyDataSetChanged(); //need this is you dissabled auto notify 
} 

P.S.을 Content providersCursorAdapter을 사용하여이 작업을 수행해야하지만 Cursor.requery()은 11 버전 이후로 사용되지 않으므로 변경 사항을 콘텐츠 제공 업체에 수동으로 알려야합니다.

0

데이터베이스 어댑터 클래스가 있지만 ListView에 표시된 항목 목록을 관리하기위한 ArrayAdapter 클래스가 없습니다. this example, 특히 WeatherAdapter.java 클래스를 살펴보십시오.

내 가정에서 틀렸고 코드의 adapter 개체가 데이터베이스 어댑터가 아니라 ArrayAdapter 클래스 인 경우 this.notifyDataSetChanged() 대신 adapter.notifyDataSetChanged()을 입력 해보십시오.

도움이되었는지 알려주세요.

+0

updatelist() 메서드는 ArrayAdapter 을 확장하는 클래스의 메서드입니다. – Javacadabra

관련 문제