2011-08-17 6 views
0

제목에서 알 수 있듯이 길게 누르면 데이터베이스에서 목록의 항목을 삭제하는 옵션이 있습니다. 코드를 실행할 때 아무 일도 일어나지 않고 "포커스 획득을 무시하고 이미 포커스가있는 창"이라는 경고 메시지가 나타납니다.android - 컨텍스트 메뉴를 사용하여 데이터베이스에서 항목 삭제

@Override 
public void onCreateContextMenu(ContextMenu menu, View v, ContextMenuInfo menuInfo) { 
    super.onCreateContextMenu(menu, v, menuInfo); 
    MenuInflater inflater = getMenuInflater(); 
    inflater.inflate(R.menu.context_menu, menu); 
} 


@Override 
public boolean onContextItemSelected(MenuItem item) { 
AdapterContextMenuInfo info = (AdapterContextMenuInfo) item.getMenuInfo(); 
    switch (item.getItemId()) { 
    case R.id.remove: 
     System.out.println(sindex); 

     db.open(); 
     db.deleteIP(info.position); //deleteIP is the method to delete item from list 
     db.close(); 



     return true; 
    default: 
    return super.onContextItemSelected(item); 
    } 
} 

deleteIP() - -

public boolean deleteIP(long _id) 
{ 
    return db.delete(DATABASE_TABLE, KEY_ID + "=" + _id, null) > 0; 
} 

입니다 db.deleteIP(info.position) 문제를 만들어 여기에 는 코드 조각인가? 하나 더 옵션을 시도했습니다. 목록 항목의 색인을 sindex에 저장했습니다. 그래서 db.deleteIP(sindex)을 호출하면 효과가있었습니다. 그러나 그것은 doesnt한다!

도와주세요! 감사합니다. .

+0

데이터가 db에서 제거되었는지 확인 했습니까? prolly 예,하지만 어댑터를 새로 고치지 않았습니다 – Selvin

+0

데이터가 제거되었는지 어떻게 확인해야합니까? – Umang

+0

자신 만의 코드를 이해하지 못하셨습니까? deleteIP이 반환하는 것을 확인하거나 행이 아직 거기에 있는지 확인하기 위해 응용 프로그램을 다시 실행하십시오. – Selvin

답변

0

info.position을 참조하고 있는데이 키를 기본 키로 사용하려고합니다. 아마도 올바르지 않을 수 있습니다. CursorAdapter을 사용하는 경우 info.idCursor_ID 값을 포함합니다.

+0

그래서 ArrayAdapter의 경우 솔루션이되어야합니까? – Mikey

+0

@mikdedroid :'info.position' 값은 배열의 인덱스입니다. – CommonsWare

+0

알아, 당신이 _ID를 얻으려면 CursorAdapter를 사용하지만, 어떻게 ArrayAdapter 있다면? – Mikey

관련 문제