如何在适配器中使用ButterKnife

13

我想使用ButterKnife来绑定listView adapter中的视图。

我尝试过这样做,但是我不能简单地使用我的"spinner"变量。

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);
        }
    }
}

请问有什么想法吗?


4
@OnClick еє”иЇҐж”ѕењЁ ViewHolder дё­гЂ‚ - EpicPandaForce
3个回答

19

你需要先将你的视图传递给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;
}

然后您将可以访问您的视图。


3

ButterKnife将您的视图绑定到ViewHolder类,因此WarmSpinnerAdapter无法直接访问它。相反,您应该将此部分移动到ViewHolder类内:

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

在这里,您可以从适配器中调用内部方法,或者直接在ViewHolder内执行逻辑。


1

由于您正在使用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;
}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接