Android: изменение дополнений на намерение - PullRequest
3 голосов
/ 28 июня 2011

У меня есть приложение, которое работает между различными видами деятельности.Одно действие, мое основное действие, имеет свое поведение, зависящее от того, какое действие в приложении запустило основное действие.Я думал, что смогу записать это в журнал, если бы каждое другое действие добавляло в намерение дополнительную функцию "launcehdFrom", которая содержит строку с именем действия hte, которое вызывает основное действие.Проблема, с которой я столкнулся, состоит в том, что, как только это значение было установлено, оно не может быть переопределено другим действием.Я не нашел хороший простой способ сделать это.Любой совет ??

Следующий код вызывается из onResume () в моей основной деятельности:

    private void processIntentRequest(){
    Intent intent = getIntent();
    ProcessIntentRequestType caller = (ProcessIntentRequestType)intent.getSerializableExtra("launchedFrom");
    switch(caller){
        case startUpActivity:
            load(this.myObj);
            break;

        case otherActivity:
            int uri = integer.parseInt(this.getIntent().getExtras().getString("uri"));          
            load(this.myObj, uri);
            break;

        default:
            load(this.myObj, 1);
    }

Этот код запускает основное действие в первый раз:

public void launchMainActivity(Obj myObj){
    Intent launchMain = new Intent(this, mainActivity.class);
    login.putExtra("launchedFrom", ProcessIntentRequestType.startupActivity);
    startActivity(launchMain);
}

Это код, который запускает основное действие из какого-либо другого действия после того, как оно было загружено по крайней мере один раз при запуске:

protected void launchMainActivity(Obj myObj, HelperObj helper) {
    String uri = helper.uri;
    Intent mainActivity = new Intent(this, MainActivity.class);
    mainActivity.putExtra("uri", uri);
    mainActivityputExtra("launchedFrom", ProcessIntentRequestType.otherActivity);
    startActivity(mainActivity.addFlags(Intent.FLAG_ACTIVITY_SINGLE_TOP)
                    .addFlags(Intent.FLAG_ACTIVITY_REORDER_TO_FRONT));
    finish();
}

1 Ответ

9 голосов
/ 29 июня 2011

Вы используете FLAG_ACTIVITY_SINGLE_TOP при вызове startActivity, которое имеет некоторое заметное поведение.В этом случае переопределите onNewIntent и позвоните setIntent оттуда.После этого платформа позвонит onResume, а ваш вызов getIntent вернет новое намерение.

...