2013-11-20 2 views
0

목록보기 항목을 탭할 때 다른 메시지를 표시하고 싶은 경우 특정 열 (예 : room_id)을 목록보기에 명시 적으로 바인딩 할 수있는 사람이 누구인지 이해할 수 있습니다. onItemClick의 id가 room_id를 취합니다.Android : 행 ID가 ListView에 할당 된 방법

listView.setOnItemClickListener(new OnItemClickListener() { 
     @Override 
     public void onItemClick(AdapterView<?> parent, View view, int position,long id) { 

     } 
    }); 

어떤 도움을 주시면 감사하겠습니다.

답변

1

이것은 (당신이 listView.setAdapter()에 전달하는) 어댑터와 관련이 있다고 생각합니다. 어댑터의 이러한 메소드를 올바르게 구현해야합니다.

@Override 
    public Object getItem(int position) { 
     return null; 
    } 

    @Override 
    public long getItemId(int position) { 
     return 0; 
    } 

그리고 당신은 둘 다 준다 직접 현재의 ID를 얻을 수 또는 개체 (및 해당 ID의 경우 속성) 내 경우

listView.setOnItemClickListener(new OnItemClickListener() { 
    @Override public void onItemClick(AdapterView parent, View view, int position,long id)  { 
     ListView lv = (ListView) parent; 
     YOUR_OBJECT yourItem = (YOUR_OBJECT) parent.getSelectedItem(); 
    } 
}); 
+0

감사합니다. 그래서 getItemId()는 항상 목록 뷰의 행 ID를 반환해야합니까? –

+0

항상 그렇지는 않습니다. 사실, doItemClick()에 대한 id 매개 변수로 getItemId()가 전달 될 것이므로 – azerto00

+0

에 대해 구현에 따라 다릅니다. –

2

목록보기에서는 객체 목록을 인수로 전달해야합니다.

listview = (ListView) findViewById(android.R.id.list); 
adapter = new YourCustomeAdapter(this, rowItems); 
listview.setAdapter(adapter); 

여기서 rowItems는 개체 목록입니다.

setOnItemClickListener 메서드에서 위치를 사용하여 rowItem 목록의 각 객체를 가져옵니다.

0
listView.setOnItemClickListener(new OnItemClickListener() { 
@Override 
    public void onItemClick(AdapterView parent, View view, int position,long id) { 

    } 
}); 

, INT 위치와 긴 ID 것이다 같은 값 즉. 목록보기의 첫 번째 항목을 클릭하면 OnItemClick()의 ​​position 및 id 값이 0이되어 궁극적으로 room_id 열의 인덱스가 제공됩니다. 따라서 특정 열 (e.x., room_id)을 목록보기에 명시 적으로 바인딩하여 onItemClick()의 ​​id가 room_id를 사용하도록 할 수 있습니다.