【问题标题】:How to use ButterKnife inside adapter如何在适配器内使用 ButterKnife
【发布时间】:2016-11-30 13:53:44
【问题描述】:

我想使用 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);
        }
    }
}

有什么想法吗?

【问题讨论】:

  • @OnClick 应该在 ViewHolder

标签: android listview bind android-adapter butterknife


【解决方案1】:

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

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

【讨论】:

    【解决方案2】:

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

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

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

    【讨论】:

      【解决方案3】:

      由于您使用的是 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;
      }
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2018-05-09
        • 2017-11-13
        相关资源
        最近更新 更多