2011-11-11 19 views
0

私はArrayAdapter ImageViewの中に置かれている]をクリックしてArrayAdapterからIDを取得する方法を、リストには次のようになりますアンドロイドはImageViewの

名前2 | ImageView |

名前3 | ImageView |

終わりそう..に

私はImageViewのをクリックした後にアイテムIDを取得する方法がわかりません。

@Override 
public View getView(int position, View contextView, ViewGroup parent) { 
    final ViewHolder viewHolder; 
    View rowView = contextView; 
    final CardList list = _cardList.get(position); 

    if (rowView == null) { 
     LayoutInflater layoutInflater = _context.getLayoutInflater(); 
     rowView = layoutInflater.inflate(R.layout.cardlist_viewlist_tpl, null, true); 
     viewHolder = new ViewHolder(); 
     viewHolder.tvCardListName = (TextView) rowView.findViewById(R.id.tvCardListName); 
     viewHolder.btnCardListLearn = (ImageView) rowView.findViewById(R.id.btnCardListLearn); 
     viewHolder.btnCardListLearn.setOnClickListener(new OnClickListener() { 
      public void onClick(View v) { 
       Intent intent = new Intent(_context, LearningCardActivity.class); 

       //!!!!!!!!!!!!!!! 
       //this doesn't work, I always get 1st positon Id 
       intent.putExtra(LearningCardActivity.CURRENT_CARD_LIST_ID, list.getId()); 
       //!!!!!!!!!!!!!!!! 

       _context.startActivity(intent); 
      } 
     }); 

     rowView.setTag(viewHolder); 
    } else { 
     viewHolder = (ViewHolder) rowView.getTag(); 
    } 

    viewHolder.tvCardListName.setText(list.getName()); 

    return rowView; 
} 

答えて

0

あなたがrowView/contextViewを再利用し、rowViewはnullに等しい場合にのみ、あなたのonClickListenerを設定することをしているように思えます。つまり、viewholderオブジェクトのリスナーは、初めてgetView()が呼び出されるときにのみ設定されます。したがって、常に同じ最初のアイテムのIDが表示されます。

すべての行にリスナーを設定する場合は、ロジックを変更してsetOnClickListener()コールを移動する必要があります。

あなたのViewHolderクラスの属性などを追加することができます
public View getView(int position, View contextView, ViewGroup parent) { 
    View rowView = contextView; 
    if (rowView == null) { 
     // Code here will only be run the very first time 
     // (when the row view hasn't been constructed yet) 
    } else { 
     // Code here will be run after that, since we're 
     // re-using the row's view 
    } 
} 
1

static class ViewHolder { 

    //... 

    int position; 

} 

あなたはこの属性は前のビューを返す設定:

//... 
viewHolder.position = position; 
return rowView; 

今、あなたの上のアイテムのIDを使用することができますリスナーはholder.positionを使用しています。 http://www.itsalif.info/content/custom-list-views-icons-and-listeners-android#comment-6526

:に基づいて

//... 
intent.putExtra(LearningCardActivity.CURRENT_CARD_LIST_ID, holder.position); 
//... 

私はそれを行うには、その良い方法かはわからないが、それは私の作品...

: あなたのケースでは、それはこのようなものでなければなりません

関連する問題