2017-05-23 2 views
7

Ich habe versucht, die zweite Phase der Android O Developer Preview zu testen. Nachdem das Projekt erstellt wurde, habe ich einfach auf Build und Ausführen geklickt, aber ich hatte keinen Erfolg.Android O Vorschau findViewById Kompilierfehler

Android Standard-generierten Code unten:

Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar); 

Compiler-Fehler aufgetreten ist.

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) 

Hilf mir! Wie behebe ich diesen Fehler?

Edit # 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(); 
     } 
    }); 
} 

=> Fehler

Fehler kompilieren: (18, 27) Fehler: Verweis auf findViewById ist mehrdeutig beide Verfahren findViewById (int) in Aktivität und Verfahren findViewById (int) in AppCompatActivity passen wo T ist eine Typvariable: T erweitert Ansicht deklariert in Methode findViewById (int)

Dies ist nicht Casting-Problem.

Meine build.gradle ist hier.

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' 
} 

Ich habe versucht, Android Oreo Developer Preview 2. und Android Studio 3.0 Canary Ausgabe verwenden.

+0

Bitte schreiben Sie Code – AbhayBohra

+0

Vielleicht einen Versuch wert: Können Sie Ihre minSdkVersion auch auf 'O' setzen – Christopher

+0

@Christopher Danke, aber gleicher Fehler. T.T –

Antwort

-1

Ich glaube, sie haben die Methodensignatur von findViewById geändert, sodass Sie den Cast nicht mehr benötigen. Versuchen Sie, dass die Codezeile ändern zu

Toolbar toolbar = findViewById(R.id.toolbar); 
+0

Ich weiß, wie man diese Art von Fehlertypen bearbeitet. Dieses Problem ist nicht so. AppCompatActivity hat die Methode 'findViewById'. und Aktivität hat die Methode 'findViewById'. Compiler mehrdeutig diese Situation. erste Methode ' findViewById (int)', zweite Methode 'View findViewById (int)'. Ich habe versucht, 'Toolbar Toolbar = (Toolbar) dies zu codieren. findViewById (R.id.toolbar); '. Aber nicht erfolgreich zu kompilieren. –

0

Die Methodensignatur von findViewById wurde mit Einführung der API-Ebene geändert 25 Generika zu unterstützen und das hässliche Gießen zu entfernen:

Die neue Methode Signatur:

public <T extends View> T findViewById (int id); 

dem alten verglichen:

public View findViewById(int id); 

Daher Ihren Code ändern:

Toolbar toolbar = findViewById(R.id.toolbar); 

Referenz: View|Android Developer

+1

Dies ist kein Casting-Problem. –

+0

Hmm, ok. Können Sie Ihren Build.gradle zeigen? Ich bin an den von Ihnen verwendeten Support-Bibliotheksversionen und der Plattformversion interessiert? Sind sie auf dem gleichen Niveau, z.B. 25. +? – Christopher

+0

Ich habe versucht, Android Oreo Developer Preview 2. –

1

Ihre build.gradle sieht gut aus, aber der Compiler scheint immer noch mit supportLib 26 gegen ältere compileSdkVersion (25 oder weniger) zu kompilieren.

Versuchen Sie, Gradle und zu synchronisieren. Build-> Clean Project. Wenn das nicht hilft, File-> Invalidate Cache/Restart sollte die Sache tun ...

0

begegnete ich das gleiche Problem, wenn mein compileSdkVersion 27 war und buildToolsVersion war nicht 27. Geändert zu compileSdkVersion 27 buildToolsVersion "27.0.0" Ich denke, es passiert, wenn die buildToolsVersion älter ist als die compileSdkVersion.

Verwandte Themen