2016-11-30 2 views
5

ButterKnife를 사용하여 listView 내부에서 내 뷰를 바인딩하고 싶습니다.어댑터 내부에서 ButterKnife를 사용하는 방법

나는 이것을 시도했지만 단순히 "스피너"var을 사용할 수 없다.

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

버터 나이프는 ViewHolder 클래스에보기를 바인딩하므로 WarmSpinnerAdapter에서 직접 볼 수 있습니다. 대신, 당신은 ViewHolder 클래스 내에서이 부분을 이동해야합니다 : 거기에서

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

, 당신은 어댑터의 내부 메소드를 호출하거나이를 사용하고 있기 때문에 ViewHolder

0

내부에 직접 로직을 실행할 수 중 ArrayAdapter getView() 메서드에서 적절한 ViewHolder 논리가 있어야합니다. (당신은이 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; 
} 

그러면보기에 액세스 할 수 있습니다.

관련 문제