ButterKnifeを使用して、listViewアダプター内のビューをバインドしたいと思います。
私はこれを試しましたが、「スピナー」変数を単純に使用することはできません。
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);
}
}
}
何かアイデアはありますか?
最初にバインドするには、ビューを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;
}
次に、ビューにアクセスします。
ButterKnifeはビューをViewHolder
クラスにバインドしているため、WarmSpinnerAdapter
はビューに直接アクセスできません。代わりに、この部分をViewHolder
クラス内に移動する必要があります。
@OnClick(R.id.spinner)
public void onClick() {
//open dialog and select
}
そこから、アダプターから内部メソッドを呼び出すか、ViewHolder
内で直接ロジックを実行できます。
ArrayAdapterを使用しているので、getView()
メソッドに適切なViewHolderロジックが必要です。 (onClickアノテーションもViewHolderクラス内に配置する必要があるため、正しく設定されていません。)
@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;
}