我已经通过为每行延伸Relative Layout
实施了自定义ListView
。setOnItemClickListener在自定义列表视图中不起作用
每行有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"/>
`
检查我的更新答案 – 2013-05-06 07:26:49
我检查没有帮助me.thank您的时间 – Rocket 2013-05-06 09:52:23
这将帮助你http://stackoverflow.com/questions/11737294/checkbox-and-setonitemclicklistener-not-working-in-android – 2016-04-14 23:30:35