1

onclickリスナーでタグを取得する際に問題があります

@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 パラメータは、新しく作成されたビュー (つまり、リスト項目) の位置を示しますが、クリックされた項目の位置は示しません。

listView.onClickListenerAdater の代わりにアクティビティで使用します。

于 2012-10-09T09:05:26.203 に答える