2013-05-06 2 views
0

모든 행에 대해 Relative Layout을 확장하여 사용자 정의 ListView을 구현했습니다.setOnItemClickListener가 사용자 지정 목록보기에서 작동하지 않습니다.

모든 행은 Checkbox, Textview, Edittext입니다. 모든 것이 잘 작동합니다. 그것은 그것을 유지합니다. Listview OnItemClickListener 행에서 Checkbox 및 Textview까지 작동합니다. 하지만 Edittext를 연속으로 추가하면 작동이 멈췄습니다.
도움이됩니다.

이 내 코드입니다

@Override 
public View getView(int position, View convertView, ViewGroup parent) { 
    ViewHolder viewHolder = null; 
    if (convertView == null) { 

     LayoutInflater inflator = context.getLayoutInflater(); 
     convertView = inflator.inflate(R.layout.takeso_row, null); 
     viewHolder = new ViewHolder(); 
     viewHolder.text = (TextView) convertView.findViewById(R.id.takesolabel); 
     viewHolder.checkbox = (CheckBox) convertView.findViewById(R.id.takesocheck); 
     viewHolder.edittext = (EditText) convertView.findViewById(R.id.takesoquantity); 

     viewHolder.edittext.setClickable(true); 
     viewHolder.edittext.setFocusable(true); 

     viewHolder.edittext.setOnFocusChangeListener(new OnFocusChangeListener() { 

      public void onFocusChange(View v, boolean hasFocus) { 
       // TODO Auto-generated method stub 
       int getPosition = (Integer) v.getTag(); 

       if(!hasFocus){ 
        //final int pos = position; 
        final EditText quantity = (EditText) v; 
        //Product prod = (Product)v.getTag(); 
        if(quantity.getText().toString().length() == 0){ 
         list.get(getPosition).setProdQuantity(0); 
        }else{ 
         list.get(getPosition).setProdQuantity(Integer.parseInt(quantity.getText().toString())); 
        } 
       } 
      } 
     }); 

     viewHolder.checkbox.setOnCheckedChangeListener(new OnCheckedChangeListener() { 

      public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) { 
       // TODO Auto-generated method stub 
       int getPosition = (Integer) buttonView.getTag(); // Here we get the position that we have set for the checkbox using setTag. 
       list.get(getPosition).setIsChecked(buttonView.isChecked()); // Set the value of checkbox to maintain its state. 

       for(int i=0; i < passlist.size(); i++) 
       { 
        if(list.get(getPosition).getProductId().compareTo(passlist.get(i).getProductId()) == 0){ 
         passlist.get(i).setIsChecked(isChecked); 
         //Log.d(passlist.get(i).getProductName(), passlist.get(i).getIsChecked().toString()); 
        } 
       } 
      } 
     }); 

     convertView.setTag(viewHolder); 
     convertView.setTag(R.id.label, viewHolder.text); 
     convertView.setTag(R.id.check, viewHolder.checkbox); 
     convertView.setTag(R.id.check, viewHolder.edittext); 
    }else{ 
     viewHolder = (ViewHolder) convertView.getTag(); 
    } 

    viewHolder.checkbox.setTag(position); // This line is important. 
    viewHolder.edittext.setTag(position); 
    viewHolder.text.setText(list.get(position).getProductName()); 
    viewHolder.checkbox.setChecked(list.get(position).getIsChecked()); 
    viewHolder.edittext.setText(list.get(position).getProdQuantity().toString()); 

    return convertView; 
}` 

XML 코드 -

`

<CheckBox 
android:id="@+id/takesocheck" 
android:layout_width="wrap_content" 
android:layout_height="wrap_content" 
android:layout_alignParentLeft="true" 
android:layout_marginLeft="4dip" 
android:layout_marginRight="10dip" 
android:focusable="false" 
android:focusableInTouchMode="false"> 
</CheckBox> 

<TextView 
android:id="@+id/takesolabel" 
android:layout_width="wrap_content" 
android:layout_height="40sp" 
android:textSize="25sp" 
android:layout_toRightOf="@id/takesocheck"> 
</TextView> 

<EditText android:id="@+id/takesoquantity" 
    android:layout_alignParentRight="true" 
    android:layout_width="120dip" 
    android:layout_height="wrap_content" 
    style="@style/EditText" 
    android:inputType="number" 
    android:layout_gravity="right" 
    android:selectAllOnFocus="true"/> 

<View android:layout_width="fill_parent" 
     android:layout_height="1dp" 
     android:background="@drawable/blue" 
     android:layout_below="@id/takesocheck"/> 

`

+0

이 –

+0

난이 당신을 도울 것입니다 와요 고마워요 시간 – Rocket

+0

에 도움이되지 체크 내 업데이트 된 대답을 확인 http://stackoverflow.com/questions/11737294/checkbox-and-setonitemclicklistener-not-working-in-android –

답변

0

추가

android:focusable="false" 
CheckBox에 대한 속성은

입니다. 확인란을 클릭하면 목록 항목 클릭을 도용하지 않습니다.

ViewView에 하위 그룹보다 먼저 포커스를 얻게하는 ListView에 android:descendantFocusability="beforeDescendants"을 추가하십시오.

+0

나는 android : focusable = "false"android : focusableInTouchMode = "false"를 checkbox에 추가했습니다. Sankar에게 답장을 보내 주셔서 감사합니다. – Rocket

+0

질문을 XML 코드로 업데이트 할 수 있습니까? –

+0

나는 또한 안드로이드 테스트 : descendantFocusability = "beforeDescendants"또한 내 행 xml.thanks 낙뢰 회신을 업데이 트하는 데 도움이되지 않습니다. – Rocket

관련 문제