2011-11-08 3 views
1

메모장 튜토리얼 파트 2를 완료했으며 모든 것이 잘 작동합니다. 그러나이 작동하고 왜 난 그냥 알아 할수 없어 한 가지입니다안드로이드 메모장 튜토리얼 - onListItemClick

onListItemClick 콜백 매개 변수 꺼냅니다) : - 확인

  • 보기 V -

    • 의 ListView 리터 확인을
    • 위치 - 사용자가 클릭 한 항목의 위치, 0부터 시작하는 색인 ​​(오른쪽?)
    • id - 사용자가 clikced 항목의 행 ID

    이것은 SqlLite DB 테이블 "notes"에서 사용 된 것과 같은 rowId로 보입니다 ...하지만 대체 어디에서 사용합니까? ListActivity는이 열을 행 ID로 사용한다는 것을 알고 있습니까? List와 DB 테이블 사이의 매핑을 찾지 못했습니다. fillData에서 바인딩 한 Cursor 만 있습니다. 그러나 UI의 Title 열과 text1 id 사이에는 매핑 만 있습니다. 그래서 rowId 바인딩은 어디에 있습니까? 그리고 그 바인딩을 다른 소스로 변경하고 싶다면 어떻게해야할까요? 사전에

    들으 알렉스

  • +0

    커서의 _id 열에서 ... – Selvin

    답변

    0

    SimpleCursorAdapter (fillData() 메서드에서)은 데이터베이스 커서의 데이터를 listview에 바인딩합니다. 항목을 클릭 할 때마다 CursorAdapter는 클릭 된 항목을 인식하고 id를 listactivity로 넘깁니다.

    +0

    답변 해 주셔서 감사합니다. 그러나 NotesDBAdapter에서 deleteNote() 연산은 무엇입니까? rowId를 받아, return mDb.delete (DATABASE_TABLE, KEY_ROWID + "="+ rowId, null)와 같은 삭제 조작을 실행합니다. AdapterContextMenuInfo.id를 사용하여 onContextItemSelected()에서 dleteNote() 메서드를 호출합니다. Doesnßt는 UI의 rowId가 DB에서 동일해야 함을 의미합니다. 아니면 그냥 "무작위"인가? 죄송합니다, 혼란 스러워요;) –

    0

    이 SQL에서와 같은 ROWID 아닙니다. 데이터베이스는 양식 요소와 완전히 다릅니다.

    이 컨텍스트에서 rowID는 단순히 클릭하는 것을 알려주는 0 기반 색인입니다. 커서는 테이블에서 ListView로 데이터를 채우는 것입니다. ContentProviders 또는 SQLite 쿼리로 직접 쿼리를 작성하지 않는 한 행을 선택하지 않아도됩니다.

    도움이 되었기를 바랍니다.

    +0

    답변 주셔서 감사합니다. 그러나이 질문은 2 가지 더 제기됩니다. 이것이 DB의 rowID가 아닌 경우 왜 onListItemClick 메소드의 'id'매개 변수를 editIntent.putExtra (NotesDbAdapter.KEY_ROWID, id)와 같은 의도입니까? 그러면 DB.rowID = ListView.Id입니다. 다른 질문은 위치와 id 매개 변수의 차이점입니까? 예제에서 나는 2 개의 엔트리를 가지고 있었고 나는 position = 1과 rowId = 4를 가진 2nd를 클릭했다. 디버깅 전에 노트를 추가하고 삭제했다고 가정했다. –

    +0

    다음 질문은 무엇입니까? – Codeman

    +0

    @Alexander Beer 내 의견을 참조하십시오 ... 어쨌든 ... 그것은 DB 또는 테이블의 다른 PK에서 ROWID가 될 수 있습니다 ... 당신이해야 할 일은 "SELECT blabla AS _id, rest , 열, 가자, 여기에서 테이블 "... 편집 : 잊어 버렸습니다 ... AFAIK sqlite에 자신의 정수/긴 PK를 사용하는 경우,이 열에 ROWID 포인트 – Selvin

    관련 문제