1

我在 onclick Listener 中遇到 getiing 标签问题

@Override
    public View getView(int position, View convertView, ViewGroup parent) {

        ViewHolder holder;
        Log.v("Tag", "Testing inflating getView");
        TextView tv = null;


        if (items != null) {
            StoreVirtualItem vi = (StoreVirtualItem) items.get(position);
            Log.i("testing", vi.getName()+",position ="+ position);
            if (vi != null) {
                if (convertView == null) 
                {
                    convertView = (RelativeLayout) View.inflate(context, context.getResources().getIdentifier("virtualitemrow", "layout", context.getPackageName()), null);
                    holder = new ViewHolder();
                    holder.textView = (TextView) convertView.findViewById(R.id.virtualItemDescription);
                    holder.layout = (RelativeLayout) convertView.findViewById(R.id.LinearLayout01);
                    holder.virtualItemIconLayout = (RelativeLayout) convertView.findViewById(R.id.LinearLayout02);
                    holder.newImage = (ImageView) convertView.findViewById(R.id.newimage);
                    holder.iconImage=null;
                    ((ImageView)holder.virtualItemIconLayout.findViewById(R.id.iconImage)).setImageBitmap(null);
                    ((ImageView)holder.virtualItemIconLayout.findViewById(R.id.backGroundThumbImage)).setImageBitmap(null);
                    if(!vi.getStoreName().equalsIgnoreCase( FishGameConstants.BACKGROUNDS_STORE_NAME)){
                        holder.iconImage = (ImageView)holder.virtualItemIconLayout.findViewById(R.id.iconImage);
                    }else{
                        holder.iconImage = (ImageView)holder.virtualItemIconLayout.findViewById(R.id.backGroundThumbImage);
                    }
                    holder.saleImage = (ImageView) convertView.findViewById(R.id.saleimage);
                    int progressBarId = 2;
                    holder.iconSpinner = (ProgressBar) holder.virtualItemIconLayout.findViewById(progressBarId);
                    holder.buyBtn = (Button) convertView.findViewById(R.id.Button01);
                    holder.soldOutImage = (ImageView) convertView.findViewById(R.id.ImageView01);
                    holder.lockView = (ImageView) convertView.findViewById(R.id.ImageView03);
                    holder.levelRequiredText = (TextView) convertView.findViewById(R.id.LevelRequiredText);
                    holder.offerLetTime = (TextView) convertView.findViewById(R.id.TextView07);
                    holder.currencyImage = (ImageView) convertView.findViewById(R.id.ImageView02);
                    holder.vgName = (TextView) convertView.findViewById(R.id.TextView01);
                    holder.line = (TextView)  convertView.findViewById(R.id.line);
                    holder.coinsText = (TextView)  convertView.findViewById(R.id.text);
                    holder.saleBuyPriceText = (TextView) convertView.findViewById(R.id.TextView06);
                    holder.previewBtn = (Button) convertView.findViewById(R.id.PreviewBtn);
                    holder.sellText = (TextView) convertView.findViewById(R.id.TextView03);
                    holder.adultText = (TextView) convertView.findViewById(R.id.TextView04);
                    holder.breedableText = (TextView) convertView.findViewById(R.id.TextView05);
                    holder. infoBtutton = (ImageView) convertView.findViewById(R.id.infoButton);
                    holder. reStockText = (TextView) convertView.findViewById(R.id.restockText);
                    holder.reStockText1 =(TextView)  convertView.findViewById(R.id.LinearLayout01).findViewById(1234567890);
                    ViewFactory.getInstance().scaleView(convertView);
                    convertView.setTag(holder);
                    holder.buyBtn.setTag("buy,"+position);
                    Log.i("testing", "if buy position1 ="+ position);
                }else {

                    holder = (ViewHolder) convertView.getTag();
                    holder.buyBtn.setTag("buy,"+position);
                    Log.i("testing", "else buy position1 ="+ position);
                }

上面提到的代码在 if 和 else 中都将位置设置为 BuyBtn 上的标记,但是在将其放在其单击侦听器上时,它会返回当前填充的列表视图的最后一行位置,即,我单击了列表视图的第 0 个位置,它返回了我的第 2 个位置。更令人担忧的是,滚动后它会好起来。

下面是我获得位置的 onclick 列表。

@Override
            public void onClick(View v) {
                Log.i("clicked", ""+v.getTag());
                TransparentDialog.getInstance(context).show();
            if(category.getStoreName().equalsIgnoreCase(TapFishConstant.FISHEGGS_STORE_NAME)){
                TapFishConfig.getInstance(null).setCategoryModel(category);
            }
            v.setClickable(false);
            if(virtualItemListview != null){                    
                virtualItemListview.setClickable(false);
                virtualItemListview.setEnabled(false);
            }
            int position = -1;
            if (VgItemHashMap.containsKey(v)) {
                position = (Integer) VgItemHashMap.get(v);
                TapFishConfig.getInstance(null).lastSelectedListViewItem=position;
                if (storeListener != null) {
                    String action = v.getTag().toString().split(",")[0];
                    int itemPosition = Integer.parseInt(v.getTag().toString().split(",")[1]);
                    StoreVirtualItem vi = (StoreVirtualItem) items.get(itemPosition);

上面提到的两个代码都写在同一个适配器中。

4

1 回答 1

0

getView() 方法的Position 参数给出了新创建的View(即列表项)的位置,它不会给出点击项的位置。

listView.onClickListener在 Activity 中使用而不是 Adater。

于 2012-10-09T09:05:26.203 回答