2016-11-30 42 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; 
} 

然後,您將有權訪問您的視圖。

相關問題