5

我在列表视图中创建了多个布局,但是当我单击时,我得到一个 AndroidRuntimeException “从 Activity 上下文外部调用 startActivity() 需要 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;
        }
4

6 回答 6

19

替换getApplicationContext()this。最有可能的是,您应该在您拥有的代码中的任何地方都这样做getApplicationContext()——仅getApplicationContext()在您特别需要该Application对象时使用。

于 2012-12-20T18:32:41.260 回答
2

旧线程,但认为这个简单的解决方案可能会对某人有所帮助。与其传递上下文,不如从视图中获取它。例如: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);
}
于 2015-12-14T05:42:55.367 回答
0

我已经添加了:

parent.getApplicationContext()

而不仅仅是:

获取应用程序上下文()

整行是:

retval=LayoutInflater.from(parent.getApplicationContext()).inflate(R.layout.layout_anuncio, null);
于 2012-12-20T18:25:42.397 回答
0

Warren Lankie Van Tonder 的解决方案几乎是好的:

-您应该避免使用 Activity 上下文,而是选择 Application Context,以防止内存泄漏。Android 开发人员的这篇博客解释说http://android-developers.blogspot.be/2009/01/avoiding-memory-leaks.html

-但是在活动上下文的情况下,您的代码是唯一的解决方案(可能用于从活动外部调用另一个活动)并且关于上面的链接,您必须在每个 onPause() 中释放静态引用

AppGlobals.setAppContext(null);

作为回报,在 onResume 而不是 onCreate 中设置静态字段。

于 2016-07-11T16:07:41.763 回答
-1
CustomAdapter mAdapter = new CustomAdapter( getApplicationContext(), yourlist);

或者

Context mContext = getAppliactionContext();

CustomAdapter mAdapter = new CustomAdapter( mContext, yourlist);

改为下面

CustomAdapter mAdapter = new CustomAdapter( this, yourlist);
于 2014-05-21T08:55:42.687 回答
-1

感谢 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);
}

这允许新意图开始,就好像它与正常的应用程序流一起工作,这样我就不必为意图设置标志。

调用 start Activity 方法很简单:

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

希望这对某人有所帮助,因为它对我有所帮助。

谢谢CommonsWare。

于 2016-01-20T08:55:34.297 回答