2016-11-30 6 views
5

私はButterKnifeを使用して、listView内のビューをバインドしたいと考えています。アダプターの内部でButterKnifeを使用する方法

私はこれを試しましたが、私は単に "スピナー" varを使うことはできません。

public class WarmSpinnerAdapter extends ArrayAdapter<Warm> { 

    Context context; 

    public WarmSpinnerAdapter(Context context, int resource, Warm[] objects) { 
     super(context, resource, objects); 
    } 

    @Override 
    public View getView(int position, View convertView, ViewGroup parent) { 
     View v = LayoutInflater.from(context).inflate(R.layout.item_spinner, null); 


     return v; 
    } 

    @OnClick(R.id.spinner) 
    public void onClick() { 
     //open dialog and select 
    } 

    static class ViewHolder { 

     @BindView(R.id.spinner) 
     MyTextView spinner; 

     ViewHolder(View view) { 
      ButterKnife.bind(this, view); 
     } 
    } 
} 

+3

'@OnClick'は' ViewHolder'になければなりません – EpicPandaForce

答えて

2

ButterKnifeはViewHolderクラスにビューをバインドしていますので、WarmSpinnerAdapterは直接ビューにアクセスできません。代わりに、あなたはViewHolderクラス内この部分を移動する必要があります。そこから

@OnClick(R.id.spinner) 
public void onClick() { 
    //open dialog and select 
} 

、あなたは、アダプタからの内部メソッドを呼び出すか、使用しているのでViewHolder

0

内に直接ロジックを実行することができるいずれかArrayAdapterの場合は、getView()メソッドで適切なViewHolderロジックが必要です。 (あなたはそれがViewHolderクラスの内側に配置されるべきであるのonClick注釈も正しく設定されていませんね。)

@Override 
public View getView(int position, View convertView, ViewGroup parent) { 
    ViewHolder viewHolder; 
    if (convertView == null) { 
     convertView = LayoutInflater.from(context).inflate(R.layout.item_spinner, null); 
     viewHolder = new ViewHolder(convertView); 
     convertView.setTag(viewHolder); 
    } else { 
     viewHolder = (ViewHolder) convertView.getTag(); 
    } 

    // now you can access your spinner var. 
    MyTextView spinner = viewHolder.spinner; 

    return convertView; 
} 
5

あなたが最初にそれをバインドするButterKnifeにビューを渡す必要があります。

@Override 
public View getView(int position, View convertView, ViewGroup parent) { 
    View v = LayoutInflater.from(context).inflate(R.layout.item_spinner, null); 
    ButterKnife.bind(this,v); 

    return v; 
} 

次に、あなたのビューにアクセスできます。