2013-04-16 5 views
9

На андроид 4.2 мое приложение работает нормально, но когда я пытаюсь проверить его с помощью Android 4.0.4 У меня есть эта ошибка сообщение:NoSuchMethodError, когда я использую android.widget.RelativeLayout.setBackground

04-16 15:06:46.601: E/AndroidRuntime(3844): java.lang.NoSuchMethodError: android.widget.RelativeLayout.setBackground 
    04-16 15:06:46.601: E/AndroidRuntime(3844):  at com.myapp.MainActivity.cambiarPagina(MainActivity.java:271) 
    04-16 15:06:46.601: E/AndroidRuntime(3844):  at com.myapp.MainActivity.cambiarPagina(MainActivity.java:119) 
    04-16 15:06:46.601: E/AndroidRuntime(3844):  at com.myapp.MainActivity.access$0(MainActivity.java:116) 
    04-16 15:06:46.601: E/AndroidRuntime(3844):  at com.myapp.MainActivity$2.onClick(MainActivity.java:70) 
    04-16 15:06:46.601: E/AndroidRuntime(3844):  at android.view.View.performClick(View.java:3524) 
    04-16 15:06:46.601: E/AndroidRuntime(3844):  at android.view.View$PerformClick.run(View.java:14202) 
    04-16 15:06:46.601: E/AndroidRuntime(3844):  at android.os.Handler.handleCallback(Handler.java:605) 
    04-16 15:06:46.601: E/AndroidRuntime(3844):  at android.os.Handler.dispatchMessage(Handler.java:92) 
    04-16 15:06:46.601: E/AndroidRuntime(3844):  at android.os.Looper.loop(Looper.java:137) 
    04-16 15:06:46.601: E/AndroidRuntime(3844):  at android.app.ActivityThread.main(ActivityThread.java:4499) 
    04-16 15:06:46.601: E/AndroidRuntime(3844):  at java.lang.reflect.Method.invokeNative(Native Method) 
    04-16 15:06:46.601: E/AndroidRuntime(3844):  at java.lang.reflect.Method.invoke(Method.java:511) 
    04-16 15:06:46.601: E/AndroidRuntime(3844):  at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:788) 
    04-16 15:06:46.601: E/AndroidRuntime(3844):  at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:555) 
    04-16 15:06:46.601: E/AndroidRuntime(3844):  at dalvik.system.NativeStart.main(Native Method) 

я использую setBackgroud добавить анимацию, как этот код

AnimationDrawable animation = new AnimationDrawable(); 
           animation.addFrame(getResources().getDrawable(R.drawable.d1), 200); 
           animation.addFrame(getResources().getDrawable(R.drawable.dio), 1000); 
           animation.addFrame(getResources().getDrawable(R.drawable.da1), 200); 
animation.setOneShot(true); 
view.setBackground(animation); 
view.post(new Starter(animation)); 

у меня есть библиотека добавлена ​​поддержка для моего проекта, и я не знаю, как решить эту проблему, любая помощь будет apreciated!

+0

Wha t есть в MainActivity.java:271? Каков тип вида в view.setBackground (анимация); ? – NINCOMPOOP

+2

прочитайте документ, setBackgroundDrawable не существует до API 16. – njzk2

ответ

32

Это был добавлен в API 16, попробуйте setBackgroundDrawable()

+2

Привет, dmon, Спасибо за ваш ответ. Если я использую setBackgroudDrawable(), eclipse говорит, что он устарел –

+2

Это прекрасно, потому что они добавили другой метод. Интересно, что они устарели от другой, учитывая, что они не на 100% совместимы. Хотя я получил, я не оценил, как работал старый метод :) – dmon

+0

Спасибо @dmon! Меня устраивает! Один вопрос, я могу определить уровень андроида ави и использовать только устаревший метод в предыдущих версиях до api 16? –

31

В дополнение к @dmon ответ: вы могли бы назвать правильный метод таким образом:

if (Build.VERSION.SDK_INT >= 16) { 

    layout.setBackground(animation); 

} else { 

    layout.setBackgroundDrawable(animation); 
} 
2

Попробуйте, это работает для меня:

Bitmap bitmap = BitmapFactory.decodeFile(new ImageLoader().fullPath + "/desiredFilename.png"); 
 
Resources res = getResources(); 
 
BitmapDrawable bitmapDrawable = new BitmapDrawable(res, bitmap); 
 
int sdk = android.os.Build.VERSION.SDK_INT; 
 
if (sdk < android.os.Build.VERSION_CODES.JELLY_BEAN) 
 
    ll.setBackgroundDrawable(bitmapDrawable); 
 
else 
 
    ll.setBackground(bitmapDrawable);

Смежные вопросы