startactivity () не работает из внутреннего класса, который расширяет ListActivity - PullRequest
2 голосов
/ 28 августа 2011

Название в основном говорит само за себя. Приведенный ниже код не выдает никаких ошибок, он просто не запускает новое действие. Код ниже.

Я попытался изменить startActivity(new Intent(mCtx, NewActivity.class));, чтобы прочитать startActivity(new Intent(MyListActivity.this, NewActivity.class));

Я тестировал это в Eclipse с AVD.

Любые мысли по этому поводу будут оценены - спасибо!

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

1 Ответ

3 голосов
/ 28 августа 2011

Возможная причина 1

Действие не было объявлено.

Вы должны добавить действие к вашему AndroidManifest.xml

Вы должны добавить это к своему <application> тег в вашем AndroidManifest.xml:

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

Возможная причина 2

На самом деле метод onChange не работает.

Пожалуйста, используйте код ниже, чтобы проверитьчто метод onChange действительно вызывается:

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

Вы также можете попробовать запустить действие с onCreate, чтобы убедиться, что оно может быть запущено.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...