java.lang.illegalStateException:Butterknife

时间:2017-08-30 19:27:23

标签: android illegalstateexception butterknife

我正在使用butterknife绑定我的视图,因此当活动开始时,抛出以下异常

  

java.lang.RuntimeException:无法启动活动ComponentInfo {.. package name ...}:java.lang.IllegalStateException:必需的视图' l' ID为2131558524,用于字段&tabaetem'和方法'检查'没找到。如果此视图是可选的,则添加' @ Nullable' (字段)或' @ Optional' (方法)注释。

注意:我在setContentView(view)之后调用了Butterknife.bind(this),这个视图不是可选的

我的代码

public class HandlingActivity extends AppCompatActivity {

@BindView(R.id.container_view)FrameLayout container;
@BindView(R.id.l)TabItem tabItem;
@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_handling);
    ButterKnife.bind(this);
}

@OnClick(R.id.l)void check(){
    StoriesFragment storiesFragment = new StoriesFragment();
    getSupportFragmentManager().beginTransaction().replace(R.id.container_view,storiesFragment).commit();
     }
}

5 个答案:

答案 0 :(得分:6)

如果您的TabItem没有准备就绪,那么在声明变量及其各自的onclick时尝试使用它。

here

获取参考资料
 @Nullable
 @BindView(R.id.l)TabItem tabItem;

 @Optional
 @OnClick(R.id.l)
  void check(){
     //method logic...
  }

答案 1 :(得分:0)

  1. 检查您是否已加入build.gradle(模块:应用)

    dependencies {
    annotationProcessor 'com.jakewharton:butterknife-compiler:8.5.1'
    provided 'javax.annotation:jsr250-api:1.0'
    compile 'com.jakewharton:butterknife:8.5.1'
    
    }
    
  2. 检查您的ID是否存在

  3. 尝试添加@OnClick(R.id.l)void check(View v){ ... }

答案 2 :(得分:0)

在我的情况下,这个错误是因为我对不同的版本使用了两种布局:

  • activity_login.xml

  • activity_login.xml(v21)

我在 activity_login.xml 中添加了 progressBar ,但是......

  

我忘记添加到 activity_login.xml(v21)

答案 3 :(得分:0)

在我的Activity类中将注释@Optional添加到@Onclick之后,它对我有用:

@Optional
@OnClick({R.id.your_id_1, R.id.your_id_2})
public void onClick(View v) {
    switch (v.getId()) {
        case R.id.your_id_1:
            break;
        case R.id.your_id_2:
            break;
    }
}

导入依赖项并绑定您的Activity:

import butterknife.ButterKnife;
import butterknife.OnClick;
import butterknife.Optional;

public class YourActivity extends AppCompatActivity {

    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.your_layout);
        ButterKnife.bind(this);
    }
}

要在库中使用Butter Knife,请将插件添加到您的buildscript中:

buildscript {
  repositories {
    mavenCentral()
   }
  dependencies {
    classpath 'com.jakewharton:butterknife-gradle-plugin:8.8.1'
  }
}

以及您的app / build.gradle

android {
    compileSdkVersion 27
    buildToolsVersion '27.0.3'
    defaultConfig {
        applicationId 'your_app_id'
        minSdkVersion 16
        targetSdkVersion 27
        versionCode 1
        versionName "1.0"

    }
}

dependencies {
        implementation 'com.jakewharton:butterknife:8.8.1'
        annotationProcessor 'com.jakewharton:butterknife-compiler:8.8.1'
}

干杯;]

答案 4 :(得分:0)

我有类似的错误,这是由于错误的布局文件在视图中被夸大了,而该视图中没有相关字段被错误报告了。