2013-10-03 10 views
4

행 목록 항목을 동적으로 추가하는 ListView가 있습니다. 각 행에는 자식이 없습니다. 이제는이 자식들에 대한 클릭 청취자를 설정하고 있습니다. 그리고이 자식 항목을 최종적으로 유지하도록 요청합니다.이 자식 항목은 정상적으로 작동하며 클릭 리스너에서 각각 클래스를 생성 할 때이 작업을 수행하는 것이 좋습니다.ListView의 포커스 된 하위를 얻는 방법?

여기는 마지막 체크 박스입니다.

isFree.setOnCheckedChangeListener(new OnCheckedChangeListener() { 
    @Override 
    public void onCheckedChanged(CompoundButton arg0, boolean arg1) { 
     // TODO Auto-generated method stub 
     if (isFree.isChecked()){...} 
    } 
}); 

하지만 난 좋은 프로그래밍 연습으로 그것을 느낄 해달라고, 내가 클릭 한 자녀 감지 할 몇 가지 기능을 사용하려면 다음 난 다음 getChildAt를 사용하여 형제 항목의 getParent를 사용하여 행에 액세스 할 수 및한다 (인덱스) 그래서, 나는이 사용 :

isFree.setOnCheckedChangeListener(new OnCheckedChangeListener() { 
    @Override 
    public void onCheckedChanged(CompoundButton arg0, boolean arg1) { 
     // TODO Auto-generated method stub 
     CheckBox tv=(CheckBox) getCurrentFocus(); 
     TableRow row = (TableRow)tv.getParent(); 
     TextView tv1=(TextView) row.getChildAt(5); 
     if (tv.isChecked()){...} 
    } 
}); 

을하지만 초점을 맞춘 항목에 그것을 사용할 때 actualy 목록보기를 반환하지만 내가 행에 초점을 맞춘 항목을합니다.

답변

0

당신은 listview의 하위 항목을 onItemClickListener와 함께 클릭했는지 확인할 수 있습니다. 그러나 일부 체크 박스 또는 다른 클릭 가능한보기가있는 행에 대해 몇 가지 작업을 수행하려는 경우 해당 클릭에 대해 몇 가지 작업을 수행하려고합니다. 해당 뷰 자체에서 클릭 리스너를 사용해야합니다.

그러나 개별보기를 클릭 할 때 listitem 행을 가져 오려면 setTag 메소드 뷰 클래스를 사용하여 색인을 저장 한 다음 클릭 리스너의 해당 색인에서 행 항목을 가져올 수 있습니다.

public view getView(int position, View convertView, ..) { 
    .... 
    .... 
    .... 
    // your code 
    convertView.setTag(position); 
    return convertView; 
} 

isFree.setOnCheckedChangeListener(new OnCheckedChangeListener() { 
    @Override 
    public void onCheckedChanged(CompoundButton arg0, boolean arg1) { 
     // TODO Auto-generated method stub 
     if (arg0.isChecked()){ 
      int index = arg0.getTag(); 
      View v = listview.getItemAtPosition(index); 
      // or get the adapter get data list from it and then index it. 

     } 
    } 
}); 

참고 : 나는 마지막 무료 내부 oncheckedchange 메서드를 사용하지 않습니다.

0

setOnCheckedChangeListener 메서드에서 첫 번째 매개 변수는 CompoundButton이며 수퍼 클래스는 CheckBox입니다. 그래서, 실제로, arg0는 당신의 체크 박스입니다. 그것을 사용하여 상위 목록 항목을 검색하고 물건을 만드십시오.

isFree.setOnCheckedChangeListener(new OnCheckedChangeListener() { 
    @Override 
    public void onCheckedChanged(CompoundButton arg0, boolean arg1) { 
     // TODO Auto-generated method stub 
     TableRow row = (TableRow)arg0.getParent(); 
     TextView tv1=(TextView) row.getChildAt(5); 
     if (arg0.isChecked()){...} 
    } 
}); 
관련 문제