startactivity () no funciona desde la clase interna que extiende ListActivity

El título básicamente lo dice todo. El siguiente código no arroja ningún error, simplemente no inicia la nueva actividad. Código a continuación.

He intentado modificar startActivity(new Intent(mCtx, NewActivity.class)); leer startActivity(new Intent(MyListActivity.this, NewActivity.class));

He estado probando esto en Eclipse con un AVD.

Cualquier comentario sobre esto será apreciado - ¡gracias!

public class MyListActivity extends ListActivity {

private Context mCtx;
MyContentObserver mContentObserver;

@Override
public void onCreate(Bundle onSavedInstance) {
    super.onCreate(onSavedInstance);
    setContentView(R.layout.calls_list);

    mContentObserver = new MyContentObserver(this);

    this.getApplicationContext().getContentResolver().registerContentObserver(CallLog.Calls.CONTENT_URI, true, mContentObserver);

}

private class MyContentObserver extends ContentObserver {
    private Context mCtx;
    public MyContentObserver(Context ctx ) {
        super(null);
        mCtx = ctx;
    }

    @Override
    public void onChange(boolean selfChange) {
        super.onChange(selfChange);
        startActivity(new Intent(mCtx, NewActivity.class));
    }
}   
}

preguntado el 27 de agosto de 11 a las 21:08

Lo que estoy notando es que no puedo lanzar nada desde el interior del ContentObserver. Intenté usar sendbroadcast también sin suerte. -

Terminé moviendo mi ContentObserver a una Service. Pude usar sendBroadcast desde allí -

1 Respuestas

Posible causa 1

La actividad no ha sido declarada.

Tienes que agregar la actividad a tu AndroidManifest.xml

Deberías agregar esto a tu <application> etiqueta en tu AndroidManifest.xml:

<activity android:name="package.name.NewActivity">
    <!-- Add an intent filter here if you wish -->
</activity>

Posible causa 2

Al onChange en realidad, el método no se ejecuta.

Utilice el siguiente código para verificar que el método onChange realmente se llama:

public class MyListActivity extends ListActivity {
    MyContentObserver mContentObserver;

    @Override
    public void onCreate(Bundle onSavedInstance) {
        super.onCreate(onSavedInstance);
        setContentView(R.layout.calls_list);

        mContentObserver = new MyContentObserver();

        this.getApplicationContext().getContentResolver().registerContentObserver(CallLog.Calls.CONTENT_URI, true, mContentObserver);
    }

    private class MyContentObserver extends ContentObserver {
        public MyContentObserver() {
            super(null);
        }

        @Override
        public void onChange(boolean selfChange) {
            super.onChange(selfChange);
            Log.d("MyListActivity.MyContentObserver", "onChange");
            startActivity(new Intent(MyListActivity.this, NewActivity.class));
        }
    }   
}

También puede intentar iniciar la actividad desde onCreate para asegurarse de que se pueda iniciar.

Respondido 28 ago 11, 02:08

con una línea como esta? <activity android:name=".NewActivity" /> ? - gnub

Sí, verifique su logcat, si esta es la razón, habrá una línea que dice que no se pudo encontrar la actividad - Nicklas A.

Así es como mi <activity> actualmente lee la etiqueta. No me encanta agregar el nombre completo del paquete. No hay rojo (errores) en logcat. <activity android:name="MyListActivity" android:label="@string/man_name"> <intent-filter> <action android:name="android.intent.action.MAIN" /> <category android:name="android.intent.category.LAUNCHER" /> </intent-filter> </activity> <activity android:name="com.gnub.NewActivity" /> </application> - gnub

disculpas por el código en el comentario anterior ... aún no he descubierto el formato del comentario. - gnub

MyListActivity tiene que leer .MyListActivity pero eso no debería afectar NewActivity. ¿Puedes verificar eso? NewActivity de hecho está en el paquete com.gnub (la declaración debe leer package com.gnub, no un subpaquete) - Nicklas A.

No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas or haz tu propia pregunta.