У меня есть активность MyActivity
с кнопкой MyButton
.
Я хочу прикрепить MySpecialOnClickListener
к MyButton
.
Я пишу MySpecialOnClickListener
во внешний файл класса.
public class MySpecialOnClickListener extends ButtonHandler implements OnClickListener {
public OnClickListenerWithSpeech (Context context)
{ super.context = context; }
@Override
public void onClick(View view) { handleClick(view); }
}
и ButtonHandler выглядит так
public abstract class ButtonHandler {
protected Context context;
protected void handleClick (View view){
if (view.getid()==R.id.button_B) {
context.startActivity (new Intent(context, ActivityC.class));
}
}
}
Я хочу сохранить всю логику для кнопок в ButtonHandler.
ТАК ... как я уже сказал, у меня есть MySpecialOnClickListener
, определенный во внешнем файле класса.
Когда я нажимаю MyButton
, я получаю следующую фатальную ошибку.
Calling startActivity() from outside of an Activity context requires the FLAG_ACTIVITY_NEW_TASK flag. Is this really what you want?
Так что я не могу нормально начать деятельность из неактивности. Достаточно справедливо.
Однако, если я изменю MySpecialOnClickListener
на внутренний класс в «MyActivity», он будет работать нормально. Помните, что ButtonHandler по-прежнему является файлом внешнего класса. Так что это (откуда в конечном итоге ActivityC
) не меняется.
Мой вопрос (наконец-то): может ли кто-нибудь объяснить логику того, почему одно разрешено, а другое нет. Я предполагаю, что это предмет или что-то в этом роде, но я немного запутался. Кажется, что код для запуска процесса запуска действия должен буквально находиться внутри другого действия.
РЕДАКТИРОВАТЬ - РЕШЕНИЕ ПРОБЛЕМЫ
см. Ниже. Расположение класса не имеет значения. Я просто не прошел в контексте правильно.