2012-11-30 12 views
8

Sto solo cominciando a fare lo sviluppo di Android, più o meno in seguito alla http://developer.android.com/training/basics/firstapp/starting-activity.html tutorial, e una cosa mi tiene intercettazioni: ho due classi, entrambi creati utilizzando la procedura guidata di creazione "Attività Android":Come risolvere "La chiamata richiede un livello API 11" con Android Activity?

public class PlacesActivity extends Activity { 

    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_places); 
     // I manually commented out the following line to get it to compile. 
     // getActionBar().setDisplayHomeAsUpEnabled(true); 
    } 
    // ... other methods 
} 

e

public class ShowOnePlace extends Activity { 

    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_show_one_place); 
     getActionBar().setDisplayHomeAsUpEnabled(true); 
    } 
    // ... other methods 
} 

Eclipse continuava a darmi i seguenti errori:

chiamata richiede livello di API 11 (corrente min è 8): android.app.Activity # getActionBar

chiamata richiede livello di API 11 (corrente min è 8): android.app.ActionBar # setDisplayHomeAsUpEnabled

finché non ho commentato uno delle righe (come mostrato sopra). Ora l'applicazione sembra da compilare ed eseguire sul mio dispositivo Android senza errori. (Bene, almeno senza che errore).

Quindi:

  • Perché getActionBar().setDisplayHomeAsUpEnabled(true); dare tale errore di una classe, ma quella stessa linea non è un errore - nemmeno un avvertimento - in altra classe?
  • C'è un bug nella procedura guidata di creazione "Attività Android" e in qualche modo l'istruzione getActionBar().setDisplayHomeAsUpEnabled(true); è errata in un'attività, ma perfettamente nell'altra?
  • C'è forse un bug in Eclipse Lint e questa affermazione è effettivamente OK in entrambe le attività (o forse è sbagliata in entrambe le attività)?
  • Cosa devo fare per poter risolvere il problema senza modificare minSdkVersion = "8" in minSdkVersion = "11"? Ho avuto l'impressione che il file "android-support-v4.jar" fosse una libreria di compatibilità che girava su dispositivi della versione 8 per gestire roba gestita in modo nativo nei dispositivi della versione 11.
  • Qual è veramente la cosa giusta da fare quando vedo questo errore?

risposta

1
Why is "getActionBar().setDisplayHomeAsUpEnabled(true);" give that error in one class, but that exact same line is not an error -- not even a warning -- in the other class? 

Basta modificare il secondo file e salvare. Darà errore!

Is there a bug in the "Android Activity" creation wizard, and somehow that "getActionBar().setDisplayHomeAsUpEnabled(true);" statement is wrong in one activity, but perfectly fine in the other? 

Può essere

Is maybe there a bug in Eclipse Lint, and that statement is actually OK in both activities (or perhaps wrong in both activities)? 

sia sbagliato nel contesto dato

What do I have to do so that I can fix this without changing minSdkVersion="8" to minSdkVersion="11"? I was under the impression that the "android-support-v4.jar" file was a compatibility library that ran on version 8 devices to handle stuff that's handled natively in version 11 devices. 

è necessario modificare minSDK Credo altra scelta. Se si desidera utilizzare Functions API 11

14

In breve, la barra delle azioni non è disponibile nelle versioni precedenti di Android e la libreria di supporto di google non fornisce tale funzionalità.Questo è il motivo per cui lint si lamenta: stai utilizzando un codice che non esiste in API verison 8 che è impostato come livello API minimo supportato dalla tua app. Se si desidera utilizzare la barra delle azioni su versioni precedenti di Android, utilizzare la libreria open source denominata "Action Bar Sherlock".

Ora, per rispondere alle vostre domande

  1. Questo dovrebbe essere un errore in entrambe le classi. Il motivo per cui non è un errore in una delle classi non è realmente importante.
  2. No
  3. E 'sbagliato in entrambe le attività
  4. Devi usare libreria open source che fornisce barra delle operazioni su versioni di Android più vecchie, cioè ActionBar Sherlock funziona alla grande per questo scopo
  5. La cosa veramente giusta da fare è quella di apri il sito web Android Developers e leggi le limitazioni della libreria di supporto.
+0

inoltre: http://developer.android.com ti consente di impostare il livello API desiderato in modo da non includere accidentalmente elementi che non funzionano nella tua app. – DigCamara

16

Utilizzare getSupportActionBar() anziché getActionBar(). Ciò fornirà le funzioni ActionBar su livelli API inferiori a 11.

4

se si utilizza appcompat-v7 e versioni successive non è possibile utilizzare actionbarsherlock perché entrambi hanno gli stessi attributi definiti. quindi queste librerie hanno un conflitto di risorse.

di farlo con libreria di supporto è necessario scaricare: (spero che tu hai giá scaricato e integrato le libreria di supporto nel progetto)

  1. è necessario utilizzare ActionBar dalla libreria di supporto, in modo da avere a estende l'attività con l'implementazione ActionBarActivity giusta.

importazioni:

import android.support.v7.app.ActionBarActivity; 
import android.support.v7.app.ActionBar; 

attività:

public class PlacesActivity extends ActionBarActivity { 

    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_places); 
     // I manually commented out the following line to get it to compile. 
     // getActionBar().setDisplayHomeAsUpEnabled(true); 
    } 
    // ... other methods 
} 

in modo da poter ottenere l'implemenation ActionBar da attività supportate da versioni precedenti:

ActionBar actionBar = activity.getSupportActionBar(); 

codice di scrittura & buon divertimento!

-2

problema è quando si crea un'app Android in eclips si è chiesto di selezionare il supporto min e max api e per impostazione predefinita eclips selezionare 8 come minimo e 19 come max se si verifica errore precedente significa che la funzione che si sta utilizzando è di versione che è maggiore di 8
per risolvere questo problema basta andare su AndroidManifest.file XML e il cambiamento seguente

<uses-sdk 
     android:minSdkVersion="19" 
     android:targetSdkVersion="19" /> 

minsdkversion di default è 8

+4

e perdi il 75% degli utenti Android ... – lenooh

0

solo fare un cambiamento nella AndroidManifest

come

<uses-sdk 
     android:minSdkVersion="11" 
     android:targetSdkVersion="18" /> 
3

Io di solito risolvere il problema con "@TargetApi (12) "annotazione

@TargetApi(11) 
    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_show_one_place); 
     getActionBar().setDisplayHomeAsUpEnabled(true); 
    } 
Problemi correlati