2012-11-15 1 views
12

목록보기의 사용자 지정 어댑터에서 선택한 항목의 값을 가져 오려고합니다. 내가 클릭하면 값이 좋은, 처음에는OnItemClick Listview에서 항목 값 가져 오기

public void onItemClick(AdapterView<?> parent, View v, 
         int position, long id) { 

        View curr = parent.getChildAt((int) id); 
        TextView c = (TextView)curr.findViewById(R.id.tvPopUpItem); 
        String playerChanged = c.getText().toString(); 

        Toast.makeText(Settings.this,playerChanged, Toast.LENGTH_SHORT).show(); 

       } 

,하지만 난 스크롤과 내가 다른 항목을 클릭하면, 그 클릭 된 항목의 잘못된 값을 얻을 ... : 나는 다음 코드로 이것을 시도 어떤 생각이 원인이 무엇입니까?

답변

45

매개 변수 v이 현재 행입니다.

public void onItemClick(AdapterView<?> parent, View v, int position, long id) { 
    TextView c = (TextView) v.findViewById(R.id.tvPopUpItem); 
    String playerChanged = c.getText().toString(); 

    Toast.makeText(Settings.this,playerChanged, Toast.LENGTH_SHORT).show(); 
} 

을 (또는 당신은 getChildAt(position)을 사용할 수 있지만 속도가 느린 것입니다.)

당신이 당신의 레이아웃에 따라이 더 간단하게 할 수있을 것 이해 : 그래서 사용합니다. 사용자 정의를 사용하고 있기 때문에

+0

감사합니다. getChildAt 위치가 작동하지 않는 이유를 알고 있습니까? 나는 또한 이것을 시도했다. 그러나 이것 역시 나에게 오류를 주었다. –

+1

어댑터에 따라'id'는 전혀 다른 인덱스를 참조 할 수있다. 예를 들어, CursorAdapters는 테이블의 기본 키를 'id'로 반환합니다. 반면에 'position'은 항상 행 수를 참조해야합니다. – Sam

+0

@Sam 감사합니다.이 작품은 저에게 효과적입니다. –

0

그냥 작은 변화가

TextView c = (TextView) v.findViewById(R.id.tvPopUpItem); 

필요합니다 다음 그

에 존재 TextViews의 세부 정보를 얻기 위해 그 값을 사용할 필요가 당신이 당신의 OnItemClickListener에서보기 인수를 전달해야보기
+1

다음에 댓글을 달고 추가 답변을 게시하지 마십시오. – sparticvs

0
listView.setOnItemClickListener(new AdapterView.OnItemClickListener() { 
      @Override 
      public void onItemClick(AdapterView<?> parent, View view, int position, long id) { 
       Intent i=new Intent(ListOfAstrologers.this,AstroProForUser.class); 
       i.putExtra("hello",adapter.getItem(position).getUsername()); 
       startActivity(i); 
      } 
     }); 

여기서 사용자 이름은 클래스에 선언 된 문자열 필드이며 클릭 할 때 팽창 된 행의 세부 정보를 얻으려면 어댑터 클래스에서 getItem() 메서드를 사용해야합니다.