获取视图位置的android listview

时间:2012-02-28 10:42:31

标签: android listview

在我的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如何正确获取位置值

2 个答案:

答案 0 :(得分:2)

你是什么意思getview没被叫到?使用getview中的位置时要小心。如果你滚动的位置将被回收,如果你onresume。

修改 评论的简短回答是list.getPositionInView(View view);

答案 1 :(得分:1)

为每个特定视图调用getView(),因此每次设置setOnCheckedChangeListener()时都会传递本地值“pos”。每次调用getview()时,都会创建一个新的变量“pos”,因为你将它设置为final,所以它不能是任何其他方式。所以每个setOnCheckedChangeListener()都有自己的“pos”变量实例。