NoSuchMethodError cuando uso android.widget.RelativeLayout.setBackground
En android 4.2 mi aplicación funciona bien, pero cuando intento probarlo con Android 4.0.4 Tengo este mensaje de error:
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)
Yo uso setBackgroud para agregar algo de animación, como este código
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));
Tengo la biblioteca de la ayuda agregada a mi proyecto, y no sé cómo resolver esto, ninguna ayuda será apreciated!
Que se añadió en API 16 , intente setBackgroundDrawable()
Además de la respuesta @dmon: se puede llamar al método apropiado de esta manera:
if (Build.VERSION.SDK_INT >= 16) { layout.setBackground(animation); } else { layout.setBackgroundDrawable(animation); }
Prueba esto, funcionó para mí:
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);