Передача сообщений из нескольких мероприятий в основную деятельность - PullRequest
3 голосов
/ 02 марта 2011

Довольно трудно разобраться в моей проблеме, но здесь все в порядке.

У меня есть одно действие Задание 1 , из которого я могу открыть одно из трех заданий Задание 2 , Задание 3 и Задание 4 , из которого я хочу получить результат Задание 3 . В рамках каждого из этих действий я могу создать новое намерение открыть любое другое действие, в свою очередь вызывая finish() для текущего действия.

У меня есть код, работающий, когда я открываю Занятие 3 из Занятие 1 и затем нажимаю кнопку, чтобы завершить Занятие 3 , оно отправляет сообщение отлично. Моя проблема заключается в том, что, например, открытие Действие 2 с Действие 1 , затем с Действие 2 открытие Действие 3 (в свою очередь вызов finish() на Занятие 2 ), затем нажмите кнопку в Занятие 3 и отправьте то же сообщение на Занятие 1 . В данный момент отправляемый код результата равен 0, когда я пытаюсь заставить его отправить код результата «726».

В целом, я хочу иметь возможность отправлять сообщения от Действия, созданной из намерения с неизвестного уровня других Действий, но сообщение всегда возвращается к тому же Самому низкому уровню Действия, если это имеет смысл.

Извините, если это трудно понять, и я надеюсь, что кто-то может мне помочь

Ответы [ 2 ]

2 голосов
/ 02 марта 2011

Я ненавижу отвечать на свои вопросы, но я все равно понял это для всех, кто ищет ответ:

Из основной деятельности

 public void onClick2Activity(View v){
            Intent i = new Intent();
            i.setClass(1Activity.this, 2Activity.class);
            startActivityForResult(i, 0);
        }

@Override
    protected void onActivityResult(int requestCode, int resultCode, Intent data) {
        super.onActivityResult(requestCode, resultCode, data);
        if(resultCode==726){
            Bundle bundle = data.getExtras();
            int string = bundle.getInt("test");
            Log.v("Extra", "" + string);
            Toast.makeText(this, "Pass", Toast.LENGTH_LONG).show();
        }
        else{
            Toast.makeText(this, "Fail", Toast.LENGTH_LONG).show();
        }
    }

Из 2Деятельность:

    public void onClick3Activity(View v){
            Intent i = new Intent();
            i.setClass(2Activity.this, 3Activity.class);
            startActivityForResult(i, 1);
        }

    @Override
    protected void onActivityResult(int requestCode, int resultCode, Intent data) {
        super.onActivityResult(requestCode, resultCode, data);
        if(resultCode==726){
            Intent in = new Intent();
            in.putExtra("test", "test");
            setResult(726,in);
            finish();
        }
        else{
            Log.v("Failed", "Failed");
        }
    }

Из 3Деятельность:

public void onItemClick(){ 
    Intent in = new Intent();
    weaponID = position  + 1;
    in.putExtra("test", "test");
    setResult(726,in);
    finish();
}
1 голос
/ 02 марта 2011

Попробуйте Наблюдатель .

Также Singleton сделает всю работу.

Или startActivityForResult на многих уровнях (Действия).

...