2011-02-24 3 views
3

데이터베이스 테이블에 의해 채워진 ListActivity에 ListView가 있습니다. ListView의 각 행은 rowid, date 및 name이라는 세 개의 TextViews가있는 RelativeLayout입니다. ListView의 .setSelection (int 위치) 메서드를 사용하여 프로그래밍 방식으로 개별 행을 선택할 수 있습니다.android : ListView 행의 개별 항목을 식별 하시겠습니까?

다음은 현재 수행하려고하는 작업입니다. 인터페이스에서 버튼을 누르면 현재 선택된 목록 행에서 rowid를 가져 와서 rowid를 사용하여 db 쿼리를 수행합니다. 목록 자체에서 ROWID를 가져 오는 방법을 알 수 없습니다. rowid는 데이터베이스의 rowid이므로 ID 또는 목록의 위치와 같지 않을 수 있습니다.

나는 이것이 어댑터로 작업해야한다고 생각하지만, 일주일 동안 웹 검색/검색을 해왔으며 이것을 파악하지 못했습니다. 누구나 제공 할 수있는 도움에 감사드립니다.

답변

3

현재 선택한 항목의 목록 위치를 알고 있고 해당 항목에 대한 일부 작업을 트리거해야하는 ListView 밖에있는 단추가 있으며 ListView 행 (또는 각 행 내 일부 자식보기) 만 만드는 것이 아닙니다. 클릭 가능. 권리?

목록의 어댑터에서 정보를 얻을 수 있습니다. getItem (int position)은 목록 항목이 나타내는 위치에있는 객체를 반환하므로 객체에 객체가 저장된 경우 필요한 정보를 직접 검색 할 수 있습니다. getView (int position)는 findViewById (int id)를 사용하여 TextView를 검색 할 수 있도록 행의 뷰를 반환합니다.

아직 어댑터가없는 경우 getAdapter()를 사용하여 ListView에서 가져올 수 있습니다.

// ListView myListView = the ListView in question 
// int selectedRow = the currently selected row in the ListView 
// Each row in the ListView is backed by an object of type MyCustomDataClass 

int dbRowId; 
Adapter adapter = myListView.getAdapter(); 

MyCustomDataClass data = (MyCustomDataClass) adapter.getItem(selectedRow); 
dbRowId = data.getDatabaseRowId(); 
// OR 
dbRowId = data.rowId; 
// OR whatever method the object has for getting the ID. 

// OR 
View listViewRow = adapter.getView(selectedRow); 
TextView dbRowView = (TextView) listViewRow.findViewById(R.id.rowid); 
String dbRowAsString = dbRowView.getText().toString(); 
dbRowId = Integer.parseInt(dbRowAsString); 

또한 사용자가 단지 오히려 행을 선택한 다음 다른 버튼을 누르면보다 ListView에 행을 탭하는 것이 더 자연스러운 지 여부를 고려할 수 있습니다. 리노의 대답이 더 효과적 일 수 있습니다.

+0

의 매개 변수에 널 (null) 추가 널 (null)이었다. 정말 고맙습니다! 위대한 공동체. – spryan

1

다음 코드로 마지막 메서드를 사용했습니다.

int dbRowId; 
Adapter adapter = myListView.getAdapter(); 

View listViewRow = adapter.getView(selectedRow); 
TextView dbRowView = (TextView) listViewRow.findViewById(R.id.rowid, null, null); 
String dbRowAsString = dbRowView.getText().toString(); 
dbRowId = Integer.parseInt(dbRowAsString); 

내가해야했던 유일한 변화는 내가 찾던 정확히 무엇을 그 .findViewByID

TextView dbRowView = (TextView) listViewRow.findViewById(R.id.rowid, null, null); 
관련 문제