Android O Developer Previewの第2フェーズをテストしようとしました。プロジェクトが作成された後、ビルドをクリックして実行しましたが、成功しませんでした。
以下のAndroidのデフォルトで生成されたコード:
Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);
コンパイルエラーが発生しました。
Error:(18, 37) error: reference to findViewById is ambiguous
both method findViewById(int) in Activity and method
<T>findViewById(int) in AppCompatActivity match
where T is a type-variable:
T extends View declared in method <T>findViewById(int)
助けて!このエラーを修正するにはどうすればよいですか?
編集#1
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);
setSupportActionBar(toolbar);
FloatingActionButton fab = (FloatingActionButton) findViewById(R.id.fab);
fab.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
Snackbar.make(view, "Replace with your own action", Snackbar.LENGTH_LONG)
.setAction("Action", null).show();
}
});
}
=>コンパイルエラー
エラー:(18、27)エラー:findViewByIdへの参照が、ActivityのメソッドfindViewById(int)とAppCompatActivityのメソッドfindViewById(int)の両方であいまいです。ここで、Tは型変数です。TはメソッドfindViewById(int)で宣言されたビューを拡張します。
これはキャストの問題ではありません。
私のbuild.gradleはここにあります。
apply plugin: 'com.Android.application'
Android {
compileSdkVersion 'Android-O'
buildToolsVersion "26.0.0-rc2"
defaultConfig {
applicationId "com.example.app"
minSdkVersion 16
targetSdkVersion 'O'
versionCode 1
versionName "1.0"
testInstrumentationRunner "Android.support.test.runner.AndroidJUnitRunner"
}
buildTypes {
release {
minifyEnabled false
proguardFiles getDefaultProguardFile('proguard-Android.txt'), 'proguard-rules.pro'
}
}
}
dependencies {
compile fileTree(dir: 'libs', include: ['*.jar'])
androidTestCompile('com.Android.support.test.espresso:espresso-core:2.2.2', {
exclude group: 'com.Android.support', module: 'support-annotations'
})
compile 'com.Android.support:appcompat-v7:26.0.0-beta1'
testCompile 'junit:junit:4.12'
compile 'com.Android.support.constraint:constraint-layout:1.0.2'
compile 'com.Android.support:design:26.0.0-beta1'
}
Android Oreo Developer Preview2を試してみました。そしてAndroid Studio 3.0Canaryエディションを使用してください。
ジェネリックスをサポートし、醜いキャストを削除するために、APIレベル25の導入により、メソッドシグネチャof findViewById
が変更されました。
新しいメソッドシグネチャ:
public <T extends View> T findViewById (int id);
古いものと比較して:
public View findViewById(int id);
したがって、コードを次のように変更します。
Toolbar toolbar = findViewById(R.id.toolbar);
参照: 表示| Android開発者
Build.gradleは良さそうに見えますが、コンパイラーは、古いcompileSdkVersion(25以下)に対してsupportLib26でコンパイルしているようです。
GradleとBuild-> Clean Projectを同期してみてください。それでも問題が解決しない場合は、ファイル->キャッシュの無効化/再起動で問題が解決するはずです...
CompileSdkVersionが27で、buildToolsVersionが27でない場合にも、同じ問題が発生しました。それらをcompileSdkVersion27に変更しました。buildToolsVersion "27.0.0" buildToolsVersionがcompileSdkVersionよりも古い場合に発生すると思います。