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);
上記のコードは両方とも同じアダプターに書かれています。