2013-05-06 49 views
0

我已经通过为每行延伸Relative Layout实施了自定义ListViewsetOnItemClickListener在自定义列表视图中不起作用

每行有Checkbox,Textview,Edittext。一切工作正常。它维护它的状态。列表视图OnItemClickListener工作直到有复选框和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

检查我的更新答案 – 2013-05-06 07:26:49

+0

我检查没有帮助me.thank您的时间 – Rocket 2013-05-06 09:52:23

+0

这将帮助你http://stackoverflow.com/questions/11737294/checkbox-and-setonitemclicklistener-not-working-in-android – 2016-04-14 23:30:35

回答

0

添加

android:focusable="false" 

属性到CheckBox。这将停止复选框窃取List项目点击。

android:descendantFocusability="beforeDescendants"添加到您的ListView中,这使得ViewGroup可以在其任何后代之前获得焦点。

+0

我已经在复选框中添加了android:focusable =“false”和android:focusableInTouchMode =“false”。感谢您的回复Sankar。 – Rocket 2013-05-06 07:17:03

+0

你能否用XML代码更新你的问题? – 2013-05-06 07:20:58

+0

我还测试了android:descendantFocusability =“beforeDescendants”也没有帮助我更新我的行xml.thanks闪电回复。 – Rocket 2013-05-06 07:42:03

相关问题