2016-11-30 60 views
5

我想使用ButterKnife绑定我的视图里面的listView adpater。如何使用ButterKnife内部适配器

我试过这个,但我不能简单地使用我的“微调”变种。

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逻辑。 (你的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; 
} 
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; 
} 

然后,您将有权访问您的视图。

相关问题