Используйте startActivityForResult из класса в активность

Не удалось найти хороший ответ для этого. У меня есть класс (не открывается из MainActivity. Там я хочу вызвать startActivityForResult, чтобы знать, когда что-то делать в пользовательском интерфейсе. Как мне это сделать правильно? Я передал активность и контекст классу. В классе:

private void init(){
        Intent TestIntent = new Intent();
        mActivity.startActivityForResult(TestIntent,MainActivity.TEST);
    }

В основной активности:

    @Override
    protected void onActivityResult(int requestCode, int resultCode, Intent Data) {
        super.onActivityResult(requestCode, resultCode, Data);
        if (requestCode == TEST){
            Toast.makeText(this, "TEST", Toast.LENGTH_SHORT).show();
        }
    }

person Omri    schedule 28.01.2020    source источник
comment
Отвечает ли это на ваш вопрос? Как использовать StartActivityForResult()   -  person isaaaaame    schedule 28.01.2020
comment
Почему вы хотите, чтобы класс вызывал startActivity? Передача действия классу — не лучший вариант, так как действие может быть уничтожено, а ваш класс по-прежнему будет содержать ссылку на него.   -  person tomerpacific    schedule 28.01.2020
comment
Вы звонили setResult(), когда заканчивали вторую активность?   -  person Ivan Wooll    schedule 28.01.2020
comment
Я просто хочу активировать что-то в основном действии из события внутри этого класса. Как слушатель из класса. Иван, здесь только одно занятие.   -  person Omri    schedule 28.01.2020


Ответы (2)


Проверьте это, вы должны передать код с намерением требуемого класса

private void init(){
    Intent TestIntent = new Intent(this,SecondClass);
    startActivityForResult(TestIntent,222);
}



@Override
    protected void onActivityResult(int requestCode, int resultCode, Intent Data) {
        super.onActivityResult(requestCode, resultCode, Data);
        if (requestCode == 222){
            Toast.makeText(this, "TEST", Toast.LENGTH_SHORT).show();
        }
    }
person Chandan kushwaha    schedule 28.01.2020
comment
Функция, которая вызывает startActivityForResult, не находится внутри действия, и я не могу скомпилировать, изменяя то, что вы предложили: Intent TestIntent = new Intent(this,MainActivity.class); Говорит: «Не удается разрешить конструктор...». Я использовал код доступа (он определен в MainActivity): public final static int TEST = 3; - person Omri; 28.01.2020
comment
Если это не действие, вам нужно получить ссылку на это действие и использовать его для вызова startActivityForResult. Однако размещение его в Activity было бы хорошим предложением. - person Chandan kushwaha; 29.01.2020

Ваш TestIntent пуст. В нем нет ничего, что говорило бы Android, что Activity запускать. Вам нужно создать свой Intent следующим образом:

private void init(){
    Intent TestIntent = new Intent(mActivity, ActivityToStart.class);
    mActivity.startActivityForResult(TestIntent,MainActivity.TEST);
}
person David Wasser    schedule 28.01.2020
comment
Спасибо за комментарий. если я это сделаю, он зациклится на постоянном запуске и выключении активности или что-то в этом роде. Я предполагаю, что это связано с тем фактом, что mActivity - это то же самое действие, которое я хочу запустить, - это означает, что класс (функции инициализации) активируется из MainActivity. Тем не менее, OnActivityResult не отвечает. - person Omri; 29.01.2020
comment
Почему вы пытаетесь запустить Activity из себя? - person David Wasser; 29.01.2020
comment
Я прочитал в комментарии выше, что вы просто хотите вызвать метод для этого Activity. Поскольку у вас есть ссылка на него, вам не нужно вызывать startActivity(), вы можете просто вызвать метод напрямую, используя mActivity.whatEverMethod(). Похоже, вы не понимаете, что такое startActivityForResult(). - person David Wasser; 29.01.2020
comment
Дэвид Вассер, возможно, вы правы. теперь я попытался вызвать функции из MainActivity, как вы предложили, но он их не распознает (несмотря на то, что они общедоступны). любая мысль? - person Omri; 30.01.2020
comment
хорошо, проблема была в том, что я взял ссылку на активность приложения Android, а не на MainActivity. - person Omri; 30.01.2020
comment
Да, я передал контекст из основной активности и использовал его, чтобы просто вызывать из него функции, как я и хотел. - person Omri; 09.02.2020
comment
Отлично, что вы решили свою проблему. Пожалуйста, примите один из ответов или напишите свой собственный ответ и примите его. Это удалит вопрос из списка вопросов без ответов. - person David Wasser; 10.02.2020