Ver la Versión Completa : [ SOLUCIONADO ] Error al hacer intent a una clase que extiende de AppCompatActivity
Joakin60
20/01/16, 14:01:57
A ver si a alguien le ha ocurrido o me puede ayudar, he buscado en foros y no encuentro nada. La cuestión es que si hago un intent de una clase a otra:
Intent detalles = new Intent(GuiameActivityItems.this,ArteArq.class);
Y la segunda clase extiende de Activity:
public class ArteArq extends Activity {
El intent lo hace perfectamente, pero si la segunda clase extiende de AppCompatActivity (necesito que extienda para hacer TabLayout):
public class ArteArq extends AppCompatActivity {
me da error en tiempo de ejecución y no da error en compilación, me gustaría saber a qué se puede deber.
Gracias de antemano por las respuestas que me puedan dar.
PD: Estoy haciéndolo con Eclipse, por si puede deberse a ello.
mocelet
20/01/16, 15:11:41
¿Y cuál es el error? Seguramente no tenga que ver con el intent sino con la propia actividad.
¿Cómo tienes definida la actividad en el manifest? Probablemente no esté definido el theme adecuado.
Joakin60
20/01/16, 16:05:53
Primero gracias por responder.
<activity android:name="com.example.guiame.guiame.ActivityGuiame"
android:label="@string/app_name"
android:screenOrientation="portrait"></activity>
<activity android:name="com.example.guiame.apartados.arte.ArteArq"
android:label="@string/app_name"
android:screenOrientation="portrait"></activity>
En cuanto a “Probablemente no esté definido el theme adecuado.” He estado mirando los Themes y ya que lo sacas tengo una gran duda, esta es en mi caso:
Tengo <uses-sdk
android:minSdkVersion="11"
android:targetSdkVersion="23" />
y android:theme="@style/TemaPersonalizado"
Mi pregunta es, de momento, ¿para cada versión entre la 11 y la 23 tengo que hacer distintas carpetas values con TemaPersonalizado distinto?
mocelet
20/01/16, 16:56:20
No hace falta que crees un tema para cada versión, Android va mirando en cada directorio y selecciona automáticamente la más cercana a la versión que necesite. Lo que sí puede hacerte falta es usar los temas del tipo Theme.AppCompat...
Pero nos estamos desviando del tema, no has dicho qué error te da. Míralo en el logcat, habrá una excepción donde dirá cuál es exactamente el problema de que la actividad no se inicie correctamente.
Joakin60
20/01/16, 17:26:16
01-20 17:23:10.793: E/AndroidRuntime(32666): FATAL EXCEPTION: main
01-20 17:23:10.793: E/AndroidRuntime(32666): java.lang.RuntimeException: Unable to start activity ComponentInfo{com.example.guiame/com.example.guiame.apartados.arte.ArteArq}: android.util.AndroidRuntimeException: requestFeature() must be called before adding content
01-20 17:23:10.793: E/AndroidRuntime(32666): at android.app.ActivityThread.performLaunchActivity(A ctivityThread.java:2306)
01-20 17:23:10.793: E/AndroidRuntime(32666): at android.app.ActivityThread.handleLaunchActivity(Ac tivityThread.java:2358)
01-20 17:23:10.793: E/AndroidRuntime(32666): at android.app.ActivityThread.access$600(ActivityThre ad.java:156)
01-20 17:23:10.793: E/AndroidRuntime(32666): at android.app.ActivityThread$H.handleMessage(Activit yThread.java:1340)
01-20 17:23:10.793: E/AndroidRuntime(32666): at android.os.Handler.dispatchMessage(Handler.java:99 )
01-20 17:23:10.793: E/AndroidRuntime(32666): at android.os.Looper.loop(Looper.java:153)
01-20 17:23:10.793: E/AndroidRuntime(32666): at android.app.ActivityThread.main(ActivityThread.jav a:5297)
01-20 17:23:10.793: E/AndroidRuntime(32666): at java.lang.reflect.Method.invokeNative(Native Method)
01-20 17:23:10.793: E/AndroidRuntime(32666): at java.lang.reflect.Method.invoke(Method.java:511)
01-20 17:23:10.793: E/AndroidRuntime(32666): at com.android.internal.os.ZygoteInit$MethodAndArgsCa ller.run(ZygoteInit.java:833)
01-20 17:23:10.793: E/AndroidRuntime(32666): at com.android.internal.os.ZygoteInit.main(ZygoteInit .java:600)
01-20 17:23:10.793: E/AndroidRuntime(32666): at dalvik.system.NativeStart.main(Native Method)
01-20 17:23:10.793: E/AndroidRuntime(32666): Caused by: android.util.AndroidRuntimeException: requestFeature() must be called before adding content
01-20 17:23:10.793: E/AndroidRuntime(32666): at com.android.internal.policy.impl.PhoneWindow.reque stFeature(PhoneWindow.java:233)
01-20 17:23:10.793: E/AndroidRuntime(32666): at android.app.Activity.requestWindowFeature(Activity .java:3262)
01-20 17:23:10.793: E/AndroidRuntime(32666): at com.example.guiame.apartados.arte.ArteArq.onCreate (ArteArq.java:22)
01-20 17:23:10.793: E/AndroidRuntime(32666): at android.app.Activity.performCreate(Activity.java:5 122)
01-20 17:23:10.793: E/AndroidRuntime(32666): at android.app.Instrumentation.callActivityOnCreate(I nstrumentation.java:1081)
01-20 17:23:10.793: E/AndroidRuntime(32666): at android.app.ActivityThread.performLaunchActivity(A ctivityThread.java:2270)
01-20 17:23:10.793: E/AndroidRuntime(32666): ... 11 more
Dexafree
20/01/16, 17:45:50
Eso del requestFeature suena a que quizás estas intentando hacer algo con la Window... puedes publicar el onCreate de esa segunda actividad??
Joakin60
20/01/16, 18:17:02
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
//Personalizar el título
requestWindowFeature(Window.FEATURE_CUSTOM_TITLE);
LayoutInflater guiame=getLayoutInflater();
View viewGuiame=guiame.inflate(R.layout.arte_arq,null);
setContentView(viewGuiame);
//setContentView(R.layout.arte_arq);
//Variables
TextView tv1 = (TextView)findViewById(R.id.textid);
TextView tv2 = (TextView)findViewById(R.id.texttipo);
TextView tv3 = (TextView)findViewById(R.id.textposicion);
//recoger pid_id_cliente
Bundle pid = this.getIntent().getExtras();
tituloapartados = pid.getString("tituloapartados");
url_all_products = pid.getString("url");
String TAG_PID = pid.getString("idC");
String TAG_TIPO = pid.getString("tipoC");
String posicion = pid.getString("posicion");
tv1.setText(TAG_PID);
tv2.setText(TAG_TIPO);
tv3.setText(posicion);
//Personalizar el título, 1
getWindow().setFeatureInt(Window.FEATURE_CUSTOM_TI TLE, R.layout.titulopersonalizado_guiame);
txtapartados = (TextView)findViewById(R.id.titulo2);
txtapartados.setTextSize(TypedValue.COMPLEX_UNIT_S P,15);
txtapartados.setText(tituloapartados);
}
De todas formas he probado con el onCreate “limpio”:
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
LayoutInflater guiame=getLayoutInflater();
View viewGuiame=guiame.inflate(R.layout.arte_arq,null);
setContentView(viewGuiame);
//setContentView(R.layout.arte_arq);
//Con extends de activity funciona igual con Layout inflater que con //setContentView
}
Y funciona con Activity y da error con AppCompatActivity.
Creo que el enfoque que dabas al principio que puede ser un problema del Theme que no es del tipo Theme.AppCompat.
mocelet
20/01/16, 21:22:09
Tienes que poner la línea super.onCreate después de la requestWindowFeature y no antes.
Joakin60
22/01/16, 19:35:42
Disculpa la tardanza en contestar pero he estado liado mirando lo de styles y themes. Parto de la base de que el problema de que extends AppCompatActivity falle podría ser debido a que podría hacerme falta usar temas del tipo AppCompat. He corregido lo que me dijiste de poner la línea super.onCreate después de la requestWindowFeature y no antes. Luego he utilizado un tema, en concreto:
<style name="MyMaterialTheme" parent="MyMaterialTheme.Base">
</style>
<style name="MyMaterialTheme.Base" parent="Theme.AppCompat.Light.DarkActionBar">
<item name="windowNoTitle">true</item>
<item name="windowActionBar">false</item>
…
Este tema lo he utilizado antes cuando hice las pruebas para hacer el TabLayout antes de integrarlo en la aplicación y funciona perfectamente. El problema es que cuando lo utilizo en la aplicación principal me da el siguiente error:
java.lang.RuntimeException: Unable to start activity ComponentInfo{com.example.guiame/com.example.guiame.MainActivity}: android.util.AndroidRuntimeException: You cannot combine custom titles with other title features
Lo que parece indicar que no puedo utilizar mi título personalizado y themes de AppCompat, pues estos ya integran un titulo propio junto con su barra de acción. Pero mirando por ahí he visto que integrando:
<item name="windowNoTitle">true</item>
<item name="windowActionBar">false</item>
se acaba el problema de compatibilidad. Pero en mi caso no es así. ¿Me podrías decir algo que me de luz?
Joakin60
28/01/16, 19:14:09
He decidido rehacer todo lo que tenía y usar ActionBar y los estilos de AppCompat-7 y la librería de diseño, me ha llevado dos días hacerlo y ha quedado perfecto funcionando todo.
Gracias a todos los que me habéis ayudado.
Dexafree
29/01/16, 09:17:49
Marcamos como Solucionado entonces :ok:
vBulletin® v3.8.1, Copyright ©2000-2025, Jelsoft Enterprises Ltd.