Контекст хочет FLAG_ACTIVITY_NEW_TASK, но я уже установил этот флаг

Я создал общий повторно используемый класс для компании, над которой я работаю, для создания некоторых общих элементов интерфейса.

Класс принимает один параметр, как в конструкции: контекст приложения.

один из методов, ContentClickableRowWithIcon позволяет вам передать намерение использовать его как действие click.

объявляет полное объявление метода:

public LinearLayout ContentClickableRowWithIcon(Drawable icon, String title, Intent i, final Boolean chooser)

этот последний атрибут используется в onClickEvent, чтобы определить, следует ли вызывать Chooser или просто перейти в намерение.

public LinearLayout ContentClickableRowWithIcon(Drawable icon, String title, Intent i, final Boolean chooser) {

    LinearLayout ll = new LinearLayout(mContext);

    // ..  LinerLayout construction, has nothing to do with the action

    i.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK); // this is apparently getting ignored... (ps: i've tried i.setFlags as well)

    final Intent intent = i;

    ll.setOnClickListener(new OnClickListener() {

        public void onClick(View v) {

            if(chooser)
                mContext.startActivity(Intent.createChooser(intent, "Complete With...")); // crashes here with: android.util.AndroidRuntimeException: Calling startActivity() from outside of an Activity  context requires the FLAG_ACTIVITY_NEW_TASK flag. Is this really what you want?
            else
                mContext.startActivity(intent); // this works fine

        }
    });

    return ll;
}

Как упоминалось в комментариях, в любое время, когда я не предоставляю возможность использовать выборщик, все работает отлично (все в этом списке получает новый флаг активности, хорошо осведомленный об этом и будет очищать, когда эта проблема будет выяснена)

В тот момент, когда я делаю это, выдается исключение: android.util.AndroidRuntimeException: Calling startActivity() from outside of an Activity context requires the FLAG_ACTIVITY_NEW_TASK flag. Is this really what you want?

У меня закончились идеи...

///EDIT:: Стоит отметить, что при отладке атрибут flags в Intent устанавливается в 268435456 с addFlags и 268435456 с setFlags, когда он достигает времени, чтобы использовать намерение в действии onClick

Ответ 1

Проблема исправлена, я думаю, что это просто сценарий "порядок работы"

что позволило этой вещи работать:

    ll.setOnClickListener(new OnClickListener() {

        public void onClick(View v) {



            if(chooser) {
                Intent intent = Intent.createChooser(i, "Complete With");
                intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
                mContext.startActivity(intent);
            } else
                mContext.startActivity(i);

        }
    });

также добавил "окончательный" модификатор к параметру в объявлении метода

public LinearLayout ContentClickableRowWithIcon(Drawable icon, String title, final Intent i, final Boolean chooser)

Ответ 2

На самом деле ваше исключение означает, что вы используете контекст отсутствия активности. его можно вызвать из контекста приложения. Убедитесь, что вы находитесь в контексте Activity, поскольку это не сервис