在我的listview的getview中,我将位置分配给另一个变量。 我的listrow里面有一个复选框。
我已经为复选框定义了setOnCheckedChangeListener。
现在当我检查/取消选中行时,我发现getview没有被调用。 但是我使用在getview中设置的position值,它给了我正确的值。
即如果我点击第10个位置,变量也有10个。
请解释一下这是如何运作的。
我的代码在
下面public View getView(int position, View convertView, ViewGroup parent) {
ViewHolder holder;
final int pos = position;
barcodeForSelectedRow = productList.get(pos).getBarcode();
formatForSelectedRow = productList.get(pos).getFormat();
if (convertView == null) {
convertView = mInflater.inflate(R.layout.product_list_row, null);
holder = new ViewHolder();
holder.text1 = (TextView) convertView.findViewById(R.id.productid);
holder.text2 = (TextView) convertView.findViewById(R.id.price);
holder.text2.setOnClickListener(listener);
holder.image = (ImageView) convertView
.findViewById(R.id.productimageid);
holder.check=(CheckBox) convertView.findViewById(R.id.checkbox);
convertView.setTag(holder);
holder.image.setOnClickListener(listener);
} else {
holder = (ViewHolder) convertView.getTag();
}
// setWishListItemsInScanList(pos, convertView);
holder.check.setOnCheckedChangeListener(new OnCheckedChangeListener() {
public void onCheckedChanged(CompoundButton checkBox,
boolean isChecked) {
Log.i("CheckBox check", "" + pos);
});
return convertView;
}
这里我在getview中设置pos =位置 当我单击第10行的复选框时,将调用oncheckchnaged侦听器,但不会调用getview函数 但我看到它的位置在onchechchangedlistener中正确。 我想知道它是如何发生的
注意:每当我来到这个活动时都会调用getview,这是预期的行为,当我点击一个复选框时,不应该调用getview,它也正常工作。我的问题是oncheckchangedlistener如何正确获取位置值
答案 0 :(得分:2)
你是什么意思getview没被叫到?使用getview中的位置时要小心。如果你滚动的位置将被回收,如果你onresume。
修改强> 评论的简短回答是list.getPositionInView(View view);
答案 1 :(得分:1)
为每个特定视图调用getView(),因此每次设置setOnCheckedChangeListener()时都会传递本地值“pos”。每次调用getview()时,都会创建一个新的变量“pos”,因为你将它设置为final,所以它不能是任何其他方式。所以每个setOnCheckedChangeListener()都有自己的“pos”变量实例。