2012-11-24 13 views
8

私は自分の画面にリストビューを持っています、すべてのリストアイテムは2つのテキストビューと1つのボタンを含んでいます。 ボタンをクリックすると、選択したリストの項目を取得してベクトルからデータを取得します。androidのリストビュー内のOnClick Listenerを設定する

これは私のリストカスタムアダプタです。しかし、私はそれを行う方法がわかりません。

private class CustomAdapter extends ArrayAdapter<ServicesItems> { 

    public CustomAdapter(Context context, int resource, 
      int textViewResourceId, List<ServicesItems> objects) { 
     super(context, resource, textViewResourceId, objects); 
    } 

    @Override 
    public View getView(int position, View convertView, ViewGroup parent) { 
     ViewHolder holder = null; 
     TextView item = null; 
     TextView description = null; 
     Button subNowBtn; 

     ServicesItems ii = getItem(position); 

     if (null == convertView) { 
      convertView = mInflater.inflate(
        R.layout.list_of_servics_item_2, null); 

      holder = new ViewHolder(convertView); 
      convertView.setTag(holder); 
     } 
     holder = (ViewHolder) convertView.getTag(); 
     // cat_name = holder.gettitle(); 

     Resources resources = getResources(); 

     ServicesItems bean1 = (ServicesItems) servicesVector 
       .elementAt(position); 

     String cat_name_str = bean1.getService_name().toString(); 
     String descreption = bean1.getDescription().toString(); 


     item = holder.getItem(); 
     item.setText(bean1.getDescription()); 

     description = holder.getDescription(); 
     description.setText(bean1.getService_name()); 

     subNowBtn=holder.getSubButton(); 

     return convertView; 
    } 

    private class ViewHolder { 
     private View mRow; 
     private TextView description = null; 
     private TextView item = null; 
     private Button sub = null; 

     public ViewHolder(View row) { 
      mRow = row; 
     } 

     public TextView getDescription() { 
      if (null == description) { 
       description = (TextView) mRow 
         .findViewById(R.id.category_tv); 
      } 
      return description; 
     } 

     public TextView getItem() { 
      if (null == item) { 
       item = (TextView)  
      mRow.findViewById(R.id.descreption_tv); 
      } 
      return item; 
     } 

     public Button getSubButton(){ 
      if(null==sub){ 
       sub=(Button)findViewById(R.id.subscribe_now_btn); 


      } 
      return sub; 
     } 

    } 

} 

答えて

8

あなたのアダプタでは、この方法を試してください。

@Override 
public View getView(final int position, View convertView, ViewGroup parent) 
{ 
    View row = convertView; 
    YourWrapper wrapper = null; 

    if (row == null) 
    { 
     row = inflater.inflate(R.layout.layout, parent, false); 
     wrapper = new YourWrapper (row); 
     row.setTag(wrapper); 
    } 
    else 
     wrapper = (YourWrapper) row.getTag(); 

    wrapper.getButton().setOnClickListener(new OnClickListener() 
    { 
     @Override 
     public void onClick(View v) 
     { 
      // What you want 
     } 
    }); 

    return row; 
} 

EDIT

あなたのラッパークラス:sub=(Button) mRow.findViewById(R.id.subscribe_now_btn);

public class YourWrapper 
{ 
    private View base; 
    private Button button; 

    public YourWrapper(View base) 
    { 
     this.base = base; 
    } 

    public Button getButton() 
    { 
     if (button == null) 
     { 
      button = (Button) base.findViewById(R.id.your_button); 
     } 
     return (button`); 
    } 
} 

変更

+0

私はholder.getSubButton()この \t \t \tを追加しました。setOnClickListener(新OnClickListener() \t \t \t { \t \t \t @Override \t \t \tます。public void onClick(vを表示) \t \t \t { \t \t \t //何をしたい \t \t \t} \t \t \t}); しかし、それはnullポインタexcwを指す。 – Reham

+0

私は私の答えを更新しました。 –

+0

ありがとう、それは今動作します。 – Reham

4

あなたはボタンをクリックしたときに、リストビューのインデックスを取得することができ、ここでは2つの例です: -

あなたは、リスナーのあなたonClick方法でこれらを書くことができます。 setTagビューを作成

mybutton.setTag(position); 

を用い

例1

View parentRow = (View) v.getParent(); 
ListView listView = (ListView) parentRow.getParent(); 
final int position = listView.getPositionForView(parentRow); 

例2

セット位置リスナー

における位置を取得します10
int position = (Integer) view.getTag(); 

・ホープ、この助け:)

+0

ありがとうございました..私はgetPositionForViewメソッドが必要でした:)良い答え – DoruChidean

関連する問題