我在listview中创建了多个布局,但是当我点击i得到一个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;
}
答案 0 :(得分:17)
将getApplicationContext()
替换为this
。最有可能的是,您应该在代码中的任何地方执行此操作getApplicationContext()
- 仅在您特别需要getApplicationContext()
对象时才使用Application
。
答案 1 :(得分:1)
旧线程,但认为这个简单的解决方案可能会帮助某人。而不是传递上下文,只需从视图中获取它。例如:- You live since 25 years and 280 days
view.getContext()
答案 2 :(得分:0)
我已添加:
parent.getApplicationContext()
而不仅仅是:
getApplicationContext()
整行是:
retval=LayoutInflater.from(parent.getApplicationContext()).inflate(R.layout.layout_anuncio, null);
答案 3 :(得分:0)
CustomAdapter mAdapter = new CustomAdapter( getApplicationContext(), yourlist);
或
Context mContext = getAppliactionContext();
CustomAdapter mAdapter = new CustomAdapter( mContext, yourlist);
更改为
CustomAdapter mAdapter = new CustomAdapter( this, yourlist);
答案 4 :(得分:0)
Warren Lankie Van Tonder的解决方案几乎的好处:
- 您应该避免使用Activity上下文并选择Application Context,以防止内存泄漏。这个Android开发人员的博客解释了http://android-developers.blogspot.be/2009/01/avoiding-memory-leaks.html
- 但是在Activity的情况下,上下文是你的代码的唯一解决方案(可能是从活动外调用另一个活动),关于上面的链接,你必须在每个onPause()中释放静态引用
AppGlobals.setAppContext(空);
作为回报,在onResume中设置静态字段而不是onCreate。
答案 5 :(得分:-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);
}
这允许新意图开始,好像它使用正常的应用程序流一样,这样我就不必为意图设置Flag。
调用start活动方法非常简单:
Intent totalTimerIntent = new Intent(AppGlobals.getAppContext(), TotalTimer.class);
AppGlobals.StartActivity(totalTimerIntent);
希望这可以帮助我,因为它帮助了我。
谢谢CommonsWare。