2015-12-11 29 views
24

我第一次使用Butterknife,但一定是錯誤的。我有一個片段和列表視圖和一個TextView只是用於測試,但Butterknife不會綁定我的變量:Android Butterknife - 在片段中綁定

public class MyFragment extends Fragment { 

    @Bind(R.id.resultListView) ListView resultList; 

    @Bind(R.id.textView1) TextView test; 

    @Override 
    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { 
     View view = inflater.inflate(R.layout.fragment_my, container, false); 
     ButterKnife.bind(this, view); 
     System.out.println(resultList); //null 
     System.out.println(view.findViewById(R.id.resultListView)); //works 
     System.out.println(test); //null 
     System.out.println(view.findViewById(R.id.textView1)); //works 
     return view; 
    } 

} 

沒有異常或任何東西。手動綁定的作品,所以我的意見必須在那裏。

+0

什麼你的依賴是什麼樣子? –

+0

我只有Butterknife罐子。 – breakline

+0

啊,你用的是eclipse嗎? –

回答

11

代碼是聰明的,看起來只有精細。因此,基於的評論,它看起來像你需要設置Eclipse中的批註處理:http://jakewharton.github.io/butterknife/ide-eclipse.html

+0

謝謝,這已完成,但有趣的是生成的文件夾是空的。我沒有看到,但我想這與它有關係? – breakline

+0

如果你做一個乾淨的構建呢? –

+0

相同。我假設註釋處理器永遠不會被調用? – breakline

24

這項工作對我來說:

搖籃

compile 'com.jakewharton:butterknife:8.6.0' 
annotationProcessor 'com.jakewharton:butterknife-compiler:8.6.0' 

代碼

. 
... 

@BindView(R.id.text_input) 
TextView text_input; 

@Nullable 
@Override 
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { 
    View view = inflater.inflate(R.layout.fragment_home, container, false); 
    ButterKnife.bind(this, view); 
    return view; 
} 

@Override 
public void onActivityCreated(@Nullable Bundle savedInstanceState) { 
    super.onActivityCreated(savedInstanceState); 

    text_input.setText("Lorem Ipsum"); 
... 
. 
+2

感謝它爲我工作 –

4

也不要忘了釋放,當你完成:

private Unbinder unbinder; 

...

@Override 
    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { 
     View v = inflater.inflate(R.layout.finalisation_step_fragment, container, false); 
     unbinder = ButterKnife.bind(this, v); 
     //initialize your UI 

     return v; 
    } 

...

@Override public void onDestroyView() { 
     super.onDestroyView(); 
     unbinder.unbind(); 
    } 
相關問題