2016-06-07 41 views
0

我在我的android studio項目中使用ButterKnife 8.0.1。下面是我的gradle文件和片段類的片段。我無法在按鈕點擊中看到Toast消息。但是,如果我使用onCLicklistener,我可以看到吐司。ButterKnife 8.0.1 @OnClick不工作在片段 - Android Studio

請幫我找出我做錯了我堅持

我的搖籃

apply plugin: 'com.android.application' 


android { 
    compileSdkVersion 23 
    buildToolsVersion "23.0.3" 

    defaultConfig { 
     applicationId "tdd.serveroverload.com.tdd" 
     minSdkVersion 15 
     targetSdkVersion 23 
     versionCode 1 
     versionName "1.0" 
    } 
    buildTypes { 
     release { 
      minifyEnabled false 
      proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro' 
     } 
    } 
} 

dependencies { 
    compile fileTree(dir: 'libs', include: ['*.jar']) 
    testCompile 'junit:junit:4.12' 
    compile 'com.android.support:appcompat-v7:23.4.0' 
    compile 'com.android.support:design:23.4.0' 
    compile 'com.android.support:support-v4:23.4.0' 
    compile 'com.jakewharton:butterknife:8.0.1' 
} 

片段類

@Override 
    public View onCreateView(LayoutInflater inflater, ViewGroup container, 
          Bundle savedInstanceState) { 
     // Inflate the layout for this fragment 
     View calcView = inflater.inflate(R.layout.content_main, container, false); 

     calcView.findViewById(R.id.add).setOnClickListener(new View.OnClickListener() { 
      @Override 
      public void onClick(View view) { 
       //It Works 
       Toast.makeText(getActivity(), "Working", Toast.LENGTH_SHORT).show(); 
      } 
     }); 

     unbinder = ButterKnife.bind(this, calcView); 

     return calcView; 
    } 


    @OnClick(R.id.one) 
    public void one(View view) { 

     //It Does not Works 
     if (view.getId() == R.id.one) { 

      Toast.makeText(getActivity(), "Click", Toast.LENGTH_SHORT).show(); 
     } 
     Toast.makeText(getActivity(), "Working", Toast.LENGTH_SHORT).show(); 
     result.setText(result.getText().toString() + 1); 
    } 
+0

你沒看見'Click'或'working'吐司? – AndiGeeky

回答

7

Butterknife github頁:

添加此給你項目級的build.gradle:

buildscript { 
    repositories { 
    mavenCentral() 
    } 
    dependencies { 
    classpath 'com.neenbedankt.gradle.plugins:android-apt:1.8' 
    } 
} 

添加到您的模塊級的build.gradle:

apply plugin: 'android-apt' 

android { 
    ... 
} 

dependencies { 
    compile 'com.jakewharton:butterknife:8.0.1' 
    apt 'com.jakewharton:butterknife-compiler:8.0.1' 
} 

確保線路應用插件......在該文件的頂部放置的地方。

+0

謝謝我做到了,但現在我崩潰了 引起:java.lang.RuntimeException:無法綁定tdd.serveroverload.com.tdd.ui.fragment.HomeFragment 的視圖在butterknife.ButterKnife.bind(ButterKnife。 java:189) at butterknife.ButterKnife.bind(ButterKnife.java:167)at tdd.serveroverload.com.tdd.ui.fragment.HomeFragment.onCreateView(HomeFragment.java:85) –

+0

它解決了我所有的問題,感謝MidasLefko for幫幫我。 –

+0

當我從7.0.1升級到8.0.1時,我很高興碰到同樣的問題 – MidasLefko

1

點擊事件的片段視圖綁定:

你只需要添加註釋。不需要使用視圖來檢查id。

請更新您的代碼如下:

@OnClick(R.id.one) 
    public void one() { 
     Toast.makeText(getActivity(), "Click", Toast.LENGTH_SHORT).show(); 
     Toast.makeText(getActivity(), "Working", Toast.LENGTH_SHORT).show(); 
     result.setText(result.getText().toString() + 1); 
    } 

這是從下面的演示示例代碼:

/** 
    * Attempts to call below method when 'Fragment Binding Button' get clicked. 
    */ 
    @OnClick(R.id.btn_fragment_binding) 
    void OnFragmentBindingClicked() { 
     loadSampleFragment(); 
    } 

欲瞭解更多信息和不同的綁定,請查看以下演示:

https://github.com/mamatagelanee07/ButterKnifeDemo

+0

我知道添加id是可選的,但是如果沒有它,它就無法正常工作,所以我開始嘗試使用id,您可以看到我添加的第二個祝酒。 –

1
App Level(build.gradle) 

apply plugin: 'android-apt' 
dependencies { 
    compile fileTree(include: ['*.jar'], dir: 'libs') 
    compile 'com.android.support:appcompat-v7:24.2.1' 
    testCompile 'junit:junit:4.12' 
    compile 'com.jakewharton:butterknife:8.4.0' 
    apt 'com.jakewharton:butterknife-compiler:8.4.0' 
} 


Project Level(build.gradle) 

buildscript { 
    repositories { 
     jcenter() 
    } 
    dependencies { 

     classpath 'com.neenbedankt.gradle.plugins:android-apt:1.8' 

    } 
}