PopupMenu cannot be resolved to a type

  • Antworten:13
Daniel online
  • Forum-Beiträge: 282

22.02.2012, 22:00:38 via Website

Hey,

ich würde in meiner App gerne ein PopupMenu verwenden. http://developer.android.com/guide/topics/ui/menus.html#PopupMenu
MinSdk ist 8, targetSdK 12.
Doch leider unterstreicht er mir immer das Popupmenu rot: "PopupMenu cannot be resolved to a type"

Weiß jemand Rat?

Ich überprüfe natürich vorher die Sdk Version..

Lg,
Daniel

Antworten
van Thinh Le
  • Forum-Beiträge: 3

23.02.2012, 00:24:37 via Website

du muss schon den Code zeigen, damit es was zu analysieren gibt.

Antworten
Daniel online
  • Forum-Beiträge: 282

23.02.2012, 11:18:01 via Website

Okay, hier mal der Code.
1OnClickListener onMenuClick = new OnClickListener() {
2 //Der OnClicklistener für den Menübutton im Header.
3 //Auf alten Geräten öffnet sich das normale Menü, ab 4.0 das Pop-up Menu
4 @Override
5 public void onClick(View v) {
6 if(android.os.Build.VERSION.SDK_INT>=11){
7 //popup
8
9 PopupMenu popup = new PopupMenu(ctx, v);
10 MenuInflater inflater = popup.getMenuInflater();
11 inflater.inflate(R.menu.main_menu, popup.getMenu());
12 popup.inflate(R.menu.main_menu);
13 popup.setOnMenuItemClickListener();
14 popup.show();
15 } else {
16 openOptionsMenu();
17 }
18
19 }
20 };

— geändert am 23.02.2012, 11:18:45

Antworten
van Thinh Le
  • Forum-Beiträge: 3

23.02.2012, 11:44:02 via Website

und steht im project.properties Datei auch target=android-11 drin?

Wenn du Features für verschiedene Android Versionen anbieten willst, muss dein Project Target immer die höchste Plattform nutzen.
Wenn du die Features testen willst, kannst du ja verschiedene Androidversionen im AVD Manager einstellen.

— geändert am 23.02.2012, 11:48:05

Antworten
Rafael K.
  • Forum-Beiträge: 2.359

23.02.2012, 11:44:50 via Website

Daniel online
Hey,

ich würde in meiner App gerne ein PopupMenu verwenden. http://developer.android.com/guide/topics/ui/menus.html#PopupMenu
MinSdk ist 8, targetSdK 12.
Doch leider unterstreicht er mir immer das Popupmenu rot: "PopupMenu cannot be resolved to a type"

Weiß jemand Rat?

Ich überprüfe natürich vorher die Sdk Version..
Ob du sie prüfst ist ja egal.
Wenn es die Klasse erst ab 4.0 gibt, musst du schon gegen ein 4.0er SDK kompilieren, damit der Quellcode überhaupt kompiliert.
Wenn du das umgehen willst, musst du deine Aufrufe komplett über Reflection machen.

Antworten
Daniel online
  • Forum-Beiträge: 282

23.02.2012, 11:51:24 via Website

Was ist dann genau der Sinn von targedSdk?
Ich werde das heut abend mal Reflections versuchen.

Danke!
Lg,
Daniel

Antworten
reiti.net
  • Forum-Beiträge: 339

23.02.2012, 11:52:57 via Website

Ich nehme an er meint, er prüft die sdk version vorher ob er die klasse aufrufen kann. Sprich er kompiliert gegen level12 unterstützt aber auch geräte mit level 8

das ist legitim, ich mach sowas regelmäßig bei filezugriffen auf die sd card (ist bei android 2.1 anders)

wenn er gegen die richtige sdk compiliert (also mindestens level 11) dann sollte dieser fehler eigentlich nicht kommen - check nochmal ob du wirklich die level 11 api nutzt

wenn du eclipse nutzt, rechte maustaste aufs project -> eigenschaften -> android -> HIER min. level 11 auswählen.

Im Manifest kannst du das level eintragen, welches mindestens(!) am gerät vorhanden sein muss, damit die app installiert werden kann.

Jeder, der schonmal admob genutzt hat weiß das, weil dort muss man genau so vorgehen

— geändert am 23.02.2012, 11:55:02

Antworten
Daniel online
  • Forum-Beiträge: 282

23.02.2012, 11:55:21 via Website

Wo kann ich das genau überprüfen?
Ich bin mir sicher das im Manifest MinSdk 8, targetSdK 12 eingetragen ist.
Wobei dort auch evtl. ein Fehler drinn sein könnte, da es mit minSdk 12 auch nicht funktioniert....

oh sry, hab gerade gesehen das du es ja beschreiben hast-.- Werds gleich mal überprüfen!

— geändert am 23.02.2012, 11:56:18

Antworten
reiti.net
  • Forum-Beiträge: 339

23.02.2012, 11:56:23 via Website

habs editiert, das manifest hat nichts damit zu tun wie deine app compiliert wird

Sei aber vorsichtig damit auf diese Weise verlierst du die Kontrolle über Klassen die es in älteren Apis nicht gibt musst also selber wissen, welche Klassen auch in der alten Api unterstützt werden und entsprechende Prüfungen einbauen.

— geändert am 23.02.2012, 11:58:03

Antworten
Daniel online
  • Forum-Beiträge: 282

23.02.2012, 11:59:30 via Website

ah okay super, habs gefunden. Läuft die App dann noch auf Geräten mit Api8?
Danke, jetzt erkennt er es auch!

Antworten
reiti.net
  • Forum-Beiträge: 339

23.02.2012, 12:03:32 via Website

ob sie läuft musst du selbst testen.

Android kümmert sich nicht darum, mit welcher api du kompiliert(!) hast - android schaut in das manifest um festzustellen ob die minsdk am gerät verfügbar ist und startet die app.

nutzt du dann klassen aus einer höheren api, die am gerät nicht vorhanden sind, bekommt der user ein force close mit "ClassNotFoundException" - du musst dann also schon selbst sehen, dass du nur Klassen benutzt die auch in der minsdk vorhanden sind oder entsprechend Prüfungen einbaust

Antworten
Daniel online
  • Forum-Beiträge: 282

23.02.2012, 12:04:59 via Website

Okay super. Das testen an Geräten mit api 8 ist kein Problem.
Was hat targedSdk dann für einen Sinn?

Antworten
reiti.net
  • Forum-Beiträge: 339

23.02.2012, 12:14:07 via Website

Wir sprechen von dem uses-sdk block im manifest (ich gehe davon aus).

minSDK: mindestens vorhandene api level am gerät
max sdk: maximal vorhandene api am gerät (soll man nicht)
target sdk: zeigt die api an mit der compiliert wurde.

letzteres wird von android u.a benutzt um deine app zur ausführungszeit am gerät zu optimieren, weil es dann schon weiß mit welcher api es kompiliert wurde.

ich persönlich setze aber nur die minsdk und lasse die andere beiden frei, da ich meine apps für gewöhnlich nicht auf eine bestimmte api festlege.

Antworten
Daniel online
  • Forum-Beiträge: 282

23.02.2012, 12:15:35 via Website

Ah okay jetzt versteh ich das, vielen Dank für die Erklärung!

Antworten