2013-03-19 75 views
9

例如,下面的代碼:爲什麼我得到這個錯誤編譯時如何只在特定的API級別上執行代碼

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

我的理解:

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

    } 
); 

} 

給出錯誤。但是有沒有什麼方法可以將源Java類標記爲僅在某些API級別上使用?或者使用定義/類似的環繞代碼塊,所以代碼僅在API level-11以上的設備上延遲綁定/抖動?什麼是最好的解決方案來實現我想要的? (這是提供的IT設備capabile與CalendarView的活動。)

+0

你在做什麼很好。 – 2013-03-19 14:59:54

+0

不幸的是,我在Eclipse中編譯時遇到了錯誤。 (意思是我可以編譯和測試代碼) – Tom 2013-03-19 15:00:48

+1

這是一個lint錯誤。您可以在首選項中禁用它。你的應用程序仍然運行良好。 – 2013-03-19 15:01:20

回答

15

我不知道這是否會解決您的問題,

,但使用的是檢查版本究竟是不是下工作API 9 (並且您自API 8以來一直支持)。

你應該使用:

if (Build.VERSION.SDK_INT > 9) { 

或者是有問題的功能是API 11,檢查「SDK_INT> 10」

然後對日食皮棉錯誤,請爲人們發表意見,禁用皮棉錯誤或將@SuppressLint(「NewAPi」)或目標添加到該功能。11.

+1

你可以使用'Build.VERSION_CODES'常量來比較SDK版本而不是硬代碼:'if(Build.VERSION.SDK_INT> Build.VERSION_CODES.GINGERBREAD){}' – 2017-03-03 18:05:11

相關問題