我想使用ButterKnife在listView adpater中绑定我的视图。
我尝试了这个,但我不能简单地使用我的"旋转器"变种
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);
}
}
}
有什么想法吗?
答案 0 :(得分:14)
您应该将视图传递给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;
}
然后您将访问您的视图。
答案 1 :(得分:2)
ButterKnife将您的观点绑定到ViewHolder
类,因此WarmSpinnerAdapter
将无法直接访问它。相反,您应该将此部分移到ViewHolder
类中:
@OnClick(R.id.spinner)
public void onClick() {
//open dialog and select
}
从那里,您可以从适配器调用内部方法或直接在ViewHolder
答案 2 :(得分:0)
由于您正在使用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;
}