<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="schemas.android.com/apk/res/android";
android:layout_width="match_parent"
android:layout_height="match_parent" android:orientation="vertical">
<View android:id="@+id/activity_top_group_area1"
android:layout_width="wrap_content"
android:layout_height="match_parent"/>
</LinearLayout>
public class TopActivity extends BaseActivity {
@BindView(R.id.activity_top_group_area1)
View mViewClickArea1;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_top);
ButterKnife.bind(this);
# do something... but mViewClickArea1 is null here.
}
}
public class BaseActivity extends AppCompactActivity {
# do some Run time Permission work that is ...
private int requestCodeM;
@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
}
@Override
public void onRequestPermissionsResult(final int requestCode, @NonNull final String[] permissions, @NonNull int[] grantResults) {
boolean isPermissionGranted = false;
if (requestCodeM == requestCode) {
if (grantResults.length > 0) {
/*--------------------------------------------------*/
for (int i = 0; i < grantResults.length; i++) {
if(grantResults[i] == PackageManager.PERMISSION_GRANTED){
isPermissionGranted=true;
}else {
isPermissionGranted=false;
break;
}
}
permissiongrantedResult(requestCode,isPermissionGranted);
}
}
}
public void addRequestPermission(String[] permissionRequest, int requestCode) {
this.requestCodeM = requestCode;
ActivityCompat.requestPermissions(ActivityWithRequestPermission.this, permissionRequest, requestCode);
}
public abstract void permissiongrantedResult(int requestCode, boolean grantStatus);`enter code here`
}
在您的代码中尝试此操作。
将xml代码更改为
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical">
<View
android:id="@+id/activity_top_group_area1"
android:layout_width="wrap_content"
android:layout_height="match_parent"/>
</LinearLayout>
检查项目分级
dependencies {
classpath 'com.android.tools.build:gradle:2.3.3'
// add this in your code
classpath 'com.neenbedankt.gradle.plugins:android-apt:1.8'
}
apply plugin: 'com.android.application'
apply plugin: 'android-apt' // add this
...
dependencies {
compile fileTree(include: ['*.jar'], dir: 'libs')
androidTestCompile('com.android.support.test.espresso:espresso-core:2.2.2', {
exclude group: 'com.android.support', module: 'support-annotations'
})
compile 'com.jakewharton:butterknife:8.6.0'
// add this
apt 'com.jakewharton:butterknife-compiler:8.6.0
}
对此可能有一个简单的答案,但试图充分使用Butternife,将一些FindViewByID转换为@BindViews,并注意到我不能对需要声明为final的视图使用BindView,因为Java引发了“变量'x'可能没有初始化”的错误。 显然,我不需要使用BindView,而只是对这一个感到好奇,以了解更多关于Java的知识。我读了一点关于最终宣言的意思,但不能把它和巴特尼刀联系起来。谢谢你的帮
我有一个来自别人的项目,但当我打开它时,有一些错误。Butternife有一个错误,它显示:“”,我知道它已被@bindview替换,我将更改为,但只有findbyid2个参数,而只有1个参数。我如何转换它? 这是新代码: 这是旧代码:
我对Android、Android Studio、Butternife和Gradle构建系统相当陌生。然而,我对Java或一般编程并不陌生。 我试图用JDK 1.8和Butternife 8.1.0版本构建一个Android应用程序,但Gradle构建一直失败,比如: 错误:在任务“:app:CompiledEbugJavaWithJack”上找不到属性“Options”。 null 它到底管用吗
Android Studio 2.3.3。