2012-02-28 4 views
-1

내 listview의 getview에서 나는 다른 변수에 위치를 할당합니다. 내 listrow 내에 체크 박스가 있습니다.안드로이드 listview보기의 위치를 ​​얻는

나는 checkbox에 대해 setOnCheckedChangeListener를 정의했다.

이제 i jus가 행을 선택/선택 취소하면 getview가 호출되지 않습니다. 하지만 getview에서 설정된 position 값을 사용하면 올바른 값을 얻을 수 있습니다.

즉, 10 번째 위치를 클릭하면 변수도 10을 갖습니다.

어떻게 작동하는지 설명해주세요. 내가 행 (10)의 체크 박스를 클릭하면 난의 getView 내 POS = 위치를 설정하고 여기에

public View getView(int position, View convertView, ViewGroup parent) { 
     ViewHolder holder; 
     final int pos = position; 
     barcodeForSelectedRow = productList.get(pos).getBarcode(); 
     formatForSelectedRow = productList.get(pos).getFormat(); 
     if (convertView == null) { 
      convertView = mInflater.inflate(R.layout.product_list_row, null); 

      holder = new ViewHolder(); 
      holder.text1 = (TextView) convertView.findViewById(R.id.productid); 

      holder.text2 = (TextView) convertView.findViewById(R.id.price); 
      holder.text2.setOnClickListener(listener); 
      holder.image = (ImageView) convertView 
        .findViewById(R.id.productimageid); 
      holder.check=(CheckBox) convertView.findViewById(R.id.checkbox); 
      convertView.setTag(holder); 
      holder.image.setOnClickListener(listener); 

    } else { 
      holder = (ViewHolder) convertView.getTag(); 
     } 


     // setWishListItemsInScanList(pos, convertView); 
     holder.check.setOnCheckedChangeListener(new OnCheckedChangeListener() { 

      public void onCheckedChanged(CompoundButton checkBox, 
        boolean isChecked) { 
       Log.i("CheckBox check", "" + pos); 


     }); 
     return convertView; 
    } 

아래

내 코드가의 oncheckchnaged 리스너가 호출지고, 아니라의 getView 기능 는하지만 난 볼의 위치가 onchechchangedlistener에서 올바르게 나타납니다. 나는 그 일이 어떻게 일어나는지 알고있다.

NB : 예상되는 행동 인이 활동에 올 때마다 getview가 호출된다. 또한 체크 박스를 클릭하면 getview가 호출되지 않아야하며 잘 작동한다. 제 질문은 oncheckchangedlistener가 어떻게 정확하게 위치 값을 얻는 지입니다.

+0

이 코드를 모두 게시하는 대신 관련 부분을 추출해야합니다. 과정에서 당신은 솔루션을 찾을 수 있습니다 ... – Kheldar

+0

당신의 컨트롤은 체크 박스의 onCheckedChange()에 들어 가지 않습니다. – Hiral

+1

onCheckedChanged이 확인란의 상태를 변경하면이 함수가 호출됩니다. 귀하의 getView 메서드가 아닙니다. – Triode

답변

1

특정 뷰마다 getView()가 호출되므로 setOnCheckedChangeListener()를 설정할 때마다 로컬 값 "pos"를 전달합니다. getview()가 호출 될 때마다 새로운 변수 "pos"가 만들어지고 최종적으로 설정되기 때문에 다른 방법으로는 사용할 수 없습니다. 따라서 각 setOnCheckedChangeListener()에는 "pos"변수의 자체 인스턴스가 있습니다.

+0

예, 내 질문에 대한 답변. 고마워. – png

2

getview가 호출되지 않는다는 것은 무엇을 의미합니까? getview에서 위치를 사용할 때는주의하십시오. 다시 스크롤하면 위치가 다시 재생됩니다.

수정 댓글에 대한 짧은 답변은 list.getPositionInView (보기보기)입니다.

+0

위치가 재활용 생각, 변환보기는 각보기 그룹에 대해 재활용됩니다. 하지만 일반적으로 위치가 데이터 배열/목록에서 내용을 가져 오는 데 사용되기 때문에 스크롤시 위치가 변경되지 않습니다 – png

+0

getview 함수가 호출되지 않는다는 것은 무엇을 의미합니까? 호출되지 않으면 액티비티를로드하지 않아도됩니다. 대부분 비어있는 활동을 가져옵니다. 뷰를 스크롤 할 수없는 경우 올바른 위치에서의 활동 중에는 아무런 문제가 없습니다. 그렇다면 활동을 일시 중지하고 (집에 타격을 가함) 아이콘에서 활동으로 돌아가서 위치를 확인하십시오. 당신은 아마도 당신의 위치가 반대 순서에 있거나, 당신이 단지 절반의 위치를 ​​가지고 있고, 각각이 두 번 호출되고 있다는 것을 알게 될 것입니다. getpositioninview()를 사용하면 안정성이 향상됩니다. – maebe

+0

getview는 예상 된 동작 인이 액티비티에 올 때마다 호출됩니다. 또한 체크 박스를 클릭하면 getview가 호출되지 않아 정상적으로 작동합니다. 내 질문은 oncheckchangedlistener가 위치 값을 올바르게 가져 오는 방법입니다.또한 스크롤 할 수 내보기 – png

관련 문제