2013-03-19 18 views
9

Na przykład, ten kod:Jak tylko wykonanie kodu na pewnym poziomie API

if (Build.VERSION.SDK_INT > Build.VERSION_CODES.GINGERBREAD) { 

    myCalendarView.setOnDateChangeListener(
    new OnDateChangeListener() { 

     @Override 
     public void onSelectedDayChange(CalendarView view, int year, int month, int dayOfMonth) { 
     Toast.makeText 
     (
      getApplicationContext(), ""+dayOfMonth, 0 
     ).show();   
     } 

    } 
); 

} 

daje błąd:

Description Resource Path Location Type Call requires API level 11 (current min is 8): android.widget.CalendarView#setOnDateChangeListener example.java /example/src/com/example/example line 20 Android Lint Problem

rozumiem, dlaczego ten błąd czasu kompilacji. Ale czy jest jakiś sposób, aby oznaczyć źródłową klasę Java, która będzie używana tylko na pewnym poziomie API-11? Lub otaczaj bloki kodu definicją/podobnym, więc kod jest późno związany/zignorowany tylko na urządzeniach powyżej poziomu API-11? Jakie jest najlepsze rozwiązanie, aby osiągnąć to, czego chcę? (Który jest dostarczenie aktywności z CalendarView na urządzeniach capabile nim.)

+0

To, co robisz, jest w porządku. –

+0

Niestety pojawia się błąd opisany podczas kompilowania w Eclipse. (To znaczy, że mogę skompilować i przetestować kod) – Tom

+1

To jest błąd lint. Możesz wyłączyć to w preferencjach. Twoja aplikacja będzie nadal działać poprawnie. –

Odpowiedz

15

Nie jestem pewien, czy to rozwiąże problem,

ale co używasz, aby sprawdzić wersję nie działa pod API 9 (a wspierasz od API 8).

Należy użyć:

if (Build.VERSION.SDK_INT > 9) { 

Albo jako problematyczne funkcja API 11, sprawdź "SDK_INT> 10"

Następnie za błędy szarpie na zaćmienie, czy jako ludzie komentarz, wyłącz błędów lint lub dodaj @SuppressLint ("NewAPi") lub cel do tej funkcji do 11.

+1

Można używać stałych 'Build.VERSION_CODES' do porównania z wersją SDK zamiast z twardym kodem:' if (Build.VERSION.SDK_INT> Build.VERSION_CODES.GINGERBREAD) {} ' –

Powiązane problemy