web-dev-qa-db-ja.com

Android Studio:Butterknifeの統合?

私は Butterknife をAndroid studioプロジェクトに実装しようとしています。

しかし、そうすると、@InjectView "シンボルInjectViewを解決できません"でエラーが発生します。

バターナイフをうまく実装していませんか?

アクティビティコード:

package com.example.rodf.testapp;

import Android.support.v7.app.ActionBarActivity;
import Android.os.Bundle;
import Android.view.Menu;
import Android.view.MenuItem;


public class MainActivity extends ActionBarActivity {

    @InjectView(R.id.tvHelloWorld) TextView tv1;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);



    }
}

レイアウト:

<RelativeLayout xmlns:Android="http://schemas.Android.com/apk/res/Android"
    xmlns:tools="http://schemas.Android.com/tools" Android:layout_width="match_parent"
    Android:layout_height="match_parent" Android:paddingLeft="@dimen/activity_horizontal_margin"
    Android:paddingRight="@dimen/activity_horizontal_margin"
    Android:paddingTop="@dimen/activity_vertical_margin"
    Android:paddingBottom="@dimen/activity_vertical_margin" tools:context=".MainActivity">

    <TextView
        Android:id="@+id/tvHelloWorld"
        Android:text="@string/hello_world" Android:layout_width="wrap_content"
        Android:layout_height="wrap_content" />



</RelativeLayout>

gradleファイル:

apply plugin: 'com.Android.application'

Android {
    compileSdkVersion 21
    buildToolsVersion "21.1.2"

    defaultConfig {
        applicationId "com.example.rodf.testapp"
        minSdkVersion 15
        targetSdkVersion 21
        versionCode 1
        versionName "1.0"
    }
    buildTypes {
        release {
            minifyEnabled false
            proguardFiles getDefaultProguardFile('proguard-Android.txt'), 'proguard-rules.pro'
        }
    }
}

dependencies {
    compile fileTree(dir: 'libs', include: ['*.jar'])
    compile 'com.Android.support:appcompat-v7:21.0.3'
    //adding the butter knife library
    compile 'com.jakewharton:butterknife:6.0.0'
}
14
android99999

あなたのコードは良いと思う、

  1. クリックしてグラドルを同期してみてください enter image description here

  2. File-_invalidate Caches_に移動して、Androidスタジオを再起動してください。

また、ButterKnife.inject(this);onCreate()を置くことを忘れないでください

11
bjiang

ButterKnifeライブラリの最新バージョンでは、@InjectView()注釈が使用されなくなったことに注意してください。

代わりに、@Bind(R.id.tvHelloWorld)ButterKnife.bind(this);が使用されます。

リファレンス: http://jakewharton.github.io/butterknife/

20
RWIL

したがって、ButterKnifeはバージョン8.5.1で更新されました

それを使用するには、

プロジェクトレベルbuild.gradle内に以下の行を追加します。

classpath 'com.jakewharton:butterknife-gradle-plugin:8.5.1'

アプリレベルbuild.gradle内に以下の行を追加します。

// Field and method binding for Android views
compile 'com.jakewharton:butterknife:8.5.1'
annotationProcessor 'com.jakewharton:butterknife-compiler:8.5.1'

次のようにbutterknifeプラグインを適用します。

apply plugin: 'com.jakewharton.butterknife'

以前のバージョンのButterKnifeに対する構文のわずかな変更は、ButterKnfeアノテーションの使用中にRの代わりにR2を使用する必要があることです。

具体的に:

書く代わりに

@BindView(R.id.textView)
TextView mTextView;

私たちは書いています

@BindView(R2.id.textView)
TextView mTextView;

そして、単にプロジェクトをビルドします。

11
Chintan Soni

このリンク からButterKnifeの手動設定をセットアップします

ファイル->その他の設定->デフォルト設定

コンパイラ->注釈プロセッサ->チェック注釈処理を有効にする

9
Kushal Sharma

TextView tv1宣言をクラス内に移動します。 ButterKnife.inject(this);メソッドも呼び出します。

import butterknife.ButterKnife;
import butterknife.InjectView;

public class MainActivity extends ActionBarActivity {

    @InjectView(R.id.tvHelloWorld) TextView tv1;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        ButterKnife.inject(this);
    }

}
2

ButterKnifeライブラリ(8.5.1)の最新バージョンでは、@InjectView()注釈は使用されません。

@InjectView(Component)の代わりに@BindView(Component)を使用でき、Butterknife.inject(this)を使用する代わりにButterKnife.bind(this)を使用できます

1
Harsh Mehta

私はすべての答えを試しましたが、ライブラリで何かを変更したため、何もうまくいきません。 @InjectViewの代わりに@Bindを試してください。それはうまくいきます

1
Krishna