AndroidRuntimeException «Вызов функции startActivity () извне контекста действия требует флаг FLAG_ACTIVITY_NEW_TASK"

Я создаю несколько макетов внутри списка, но когда я нажимаю, я получаю исключение AndroidRuntimeException. Для вызова функции startActivity () из контекста Activity требуется флаг FLAG_ACTIVITY_NEW_TASK. Это действительно то, что вы хотите?

Я добавляю

Intent.FLAG_ACTIVITY_NEW_TASK

К моему намерению, но я получаю то же сообщение! знак равно

@Override public View getView(int position, View convertView, ViewGroup parent) { retval=LayoutInflater.from(getApplicationContext()).inflate(R.layout.layout_anuncio, null); ImageView image=(ImageView) retval.findViewById(R.id.imageAD); LoadAds loadAds= new CargaAnuncios(); clickUrl = LoadAds.cargaImagenAnuncio(image, mContext, GlobalInfo.ANUNCIO_CARRIL_PORTADA); image.setOnClickListener(new OnClickListener(){ @Override public void onClick(View view) { Bundle bundle=new Bundle(); bundle.putString("url", clickUrl); Intent intent =new Intent(mContext,CustomWebView.class); intent.putExtras(bundle); intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK); mContext.startActivity(intent); } }); return retval; } 

Замените getApplicationContext() на this . Скорее всего, вы должны сделать это в своем коде везде, где у вас есть getApplicationContext() – используйте getApplicationContext() когда вам нужен объект Application .

Старая нить, но подумал, что это простое решение может помочь кому-то. Вместо того, чтобы передавать контекст, просто получите его из представления. Например: view.getContext()

 @Override public void onClick(View view) { Bundle bundle=new Bundle(); bundle.putString("url", clickUrl); Intent intent =new Intent(view.getContext(),CustomWebView.class); intent.putExtras(bundle); intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK); view.getContext().startActivity(intent); } 

Я добавил:

parent.getApplicationContext ()

Вместо просто:

getApplicationContext ()

Целая линия:

 retval=LayoutInflater.from(parent.getApplicationContext()).inflate(R.layout.layout_anuncio, null); 
 CustomAdapter mAdapter = new CustomAdapter( getApplicationContext(), yourlist); 

или

 Context mContext = getAppliactionContext(); CustomAdapter mAdapter = new CustomAdapter( mContext, yourlist); 

Изменить ниже

 CustomAdapter mAdapter = new CustomAdapter( this, yourlist); 

Решение Warren Lankie Van Tonder – это почти хорошо:

-Вы должны избегать использования контекста активности и вместо этого использовать контекст приложения, чтобы предотвратить утечку памяти. В этом блоге разработчика Android объясняется, что http://android-developers.blogspot.be/2009/01/avoiding-memory-leaks.html

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

AppGlobals.setAppContext (нуль);

Взамен установите статическое поле в onResume, а не onCreate.

Благодаря CommonsWare я придумал это решение, которое лучше всего работало.

Я добавил новый класс

 package com.test.test; import android.app.Activity; import android.content.Context; import android.content.Intent; import android.os.Bundle; public class AppGlobals extends Activity { private static Context appContext; public static Context getAppContext(){ return appContext; } public static void setAppContext(Context context){ appContext = context; } public static void StartActivity(Intent intent){ appContext.startActivity(intent); } } 

Все, что мне нужно было сделать, это добавить код ниже для каждого действия onCreate, к которому я перешел.

 @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_login); AppGlobals.setAppContext(this); } 

Это позволило новому намерению начать, как если бы он работал с обычным потоком приложений, и таким образом мне не нужно было устанавливать флаг для намерения.

Вызов метода начальной активности так же просто, как:

 Intent totalTimerIntent = new Intent(AppGlobals.getAppContext(), TotalTimer.class); AppGlobals.StartActivity(totalTimerIntent); 

Надеюсь, это помогает кому-то, поскольку это помогло мне.

Спасибо, CommonsWare.

Intereting Posts
Есть ли причина, по которой я не должен хранить хранилище ключей в контроле версий? Как запустить активность только один раз, когда приложение открывается в первый раз? Примечание. Com.google.common.cache.Striped64 динамически получает доступ к объявленному полю «база» Оффлайн-запрос Android с волейболом Загрузите android-ndk-r9-linux-x86 Gradle: не указан тип ресурса (в 'text' со значением '@ {user.name}'). Не работает привязка данных Как повернуть растровое изображение на 90 градусов Отсутствует пакет javax.annotation.processing для Android. Невозможно использовать AbstractProcessor Разница между getConnectionInfo () и getScanResults () для обнаружения изменений силы сигнала Хорошо ли использовать только GCM для разработки чат-приложений для XMPP-андроида? РейтингBar – переключить или отменить Добавьте больше прозрачного оверлея, чтобы увеличить зону с кликом, без изменения макета Как установить мое приложение для мобильных телефонов в Android Kitkat? Не удается найти «emulator.exe» при попытке протестировать приложения Как я могу динамически создать предпочтение Android?