【发布时间】:2012-02-20 07:07:17
【问题描述】:
我有一个列表视图,每一行都有一个复选框、图像视图和文本视图
我的要求是 1. 可以选中和取消选中复选框,并且对于每行的每次单击复选框执行功能1:我可以通过为 baseadapter 的 getview 中的复选框定义一个 onitem clicklistenr 来做到这一点
- 如果单击复选框以外的任何其他项目,我想将其解释为行单击并执行功能 2。目前我为 textview 定义了一个 onitemclick 侦听器,它可以工作
所以我的问题是,正确的做法是,为所有其他项目定义 onitemclick 侦听器并使其调用函数 2 ?
或者有没有一种方法可以为我的列表实现行选择。 请在下面查看我的代码。如果需要,我可以提供更多详细信息
list.java
public class ScanListActivity extends BaseActivity {
static Button scanlist;
@Override
protected void onCreate(Bundle savedInstanceState) {
// TODO Auto-generated method stub
super.onCreate(savedInstanceState);
this.requestWindowFeature(Window.FEATURE_NO_TITLE);
setContentView(R.layout.scan_list);
List<ScannedProduct> productList = new ArrayList<ScannedProduct>();
productList = getProductList();
final ListView lv = (ListView) findViewById(R.id.list);
scanlist = (Button) findViewById(R.id.addtowishlist);
scanlist.setEnabled(false);
lv.setAdapter(new ProductListAdapter(this, productList, scanlist));
}
适配器;getview
public View getView(int position, View convertView, ViewGroup parent) {
ViewHolder holder;
final int pos = position;
if (convertView == null) {
convertView = mInflater.inflate(R.layout.product_list_row, null);
holder = new ViewHolder();
holder.text1 = (TextView) convertView.findViewById(R.id.productid);
holder.text1.setOnClickListener(new OnClickListener() {
public void onClick(View v) {
Log.i("List",""+pos);
}
});
holder.text2 = (TextView) convertView.findViewById(R.id.price);
holder.image = (ImageView) convertView
.findViewById(R.id.productimageid);
convertView.setTag(holder);
} else {
holder = (ViewHolder) convertView.getTag();
}
holder.text1.setText(productList.get(position).getTitle());
holder.text2.setText(productList.get(position).getPrice().toString());
if(productList.get(position).getSmallImage() != null){
byte [] bb= (productList.get(position).getSmallImage());
holder.image.setImageBitmap(BitmapFactory.decodeByteArray(bb, 0, bb.length));
}
else{
holder.image.setImageBitmap(null);
holder.image.setBackgroundResource(R.drawable.highlight_disabled);
}
// holder.image.setImageBitmap(Utils.loadBitmap(productList.get(position).getSmallImage()));
final CheckBox check = (CheckBox) convertView
.findViewById(R.id.checkbox);
check.setOnCheckedChangeListener(new OnCheckedChangeListener() {
public void onCheckedChanged(CompoundButton buttonView,
boolean isChecked) {
if (check.isChecked()) {
ProductListAdapter.count++;
} else {
ProductListAdapter.count--;
}
if (ProductListAdapter.count == 0) {
//showOrHideButton.setClickable(false);
//showOrHideButton.setVisibility(View.GONE);
showOrHideButton.setEnabled(false);
} else {
//showOrHideButton.setVisibility(View.VISIBLE);
showOrHideButton.setEnabled(true);
}
}
});
return convertView;
}
static class ViewHolder {
TextView text1;
ImageView image;
TextView text2;
}
【问题讨论】: