java.lang.reflect.InitationTargetException

问题描述 投票:0回答:4

这是我的 ListView 自定义适配器中的一段代码:

@Override
public View getView(int i, View convertView, ViewGroup parent) {
    final MovieEntity feedItem=feedTrailersList.get(i);

    //LinearLayout Trailers_Linear=(LinearLayout) convertView.findViewById(R.id.Trailers_Linear);

    View view=convertView;
    if (view==null){
        view=LayoutInflater.from(getContext()).inflate(R.layout.trailer_list_item, parent,false);
    }
    TextView trailerName=(TextView)view.findViewById(R.id.trailer_name);
    trailerName.setText(feedItem.getTRAILER_NAME_STRING());
    trailerName.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {
            Intent intent=new Intent(String.valueOf(Intent.FLAG_ACTIVITY_NEW_TASK));
            intent.setData(Uri.parse(feedItem.getTRAILER_KEY_STRING()));
            mContext.startActivity(intent);

        }
    });
 return view;
}

在这里,我尝试通过我的上下文启动Activity,因为我处于自定义适配器类中而不是活动中,但它给了我这个错误标题:

ex: java.lang.reflect.InvocationTargetException
cause : android.util.AndroidRuntimeException: Calling startActivity() from outside of an Activity  context requires the FLAG_ACTIVITY_NEW_TASK flag. Is this really what you want?

我正在使用

Intent intent=new Intent(Intent.ACTION_VIEW);
标志,并尝试过
Intent intent=new Intent(String.valueOf(Intent.FLAG_ACTIVITY_NEW_TASK));
显示此异常后。

任何人都可以告诉我这个例外指的是什么吗?非常感谢您的帮助。预先感谢。

android android-intent custom-adapter getview
4个回答
1
投票

您的

mContext
变量不是
Activity
- 也许您正在使用
getApplicationContext()
创建
mContext

在任何情况下,根本不需要有

Context
变量 - 您可以随时使用
getContext()
来检索当前的
Context


0
投票

这是我当前的意图代码块,它正在工作

Intent intent=new Intent(); 
intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);     
intent.setData(Uri.parse(feedItem.getTRAILER_KEY_STRING())); 
getContext().startActivity(intent); 

0
投票

不知道你的mContext是什么。但您始终可以从

parent.getContext()
获取适当的上下文。而且你的意图看起来很奇怪。它应该会因
ActivityNotFoundException: No Activity found to handle Intent
崩溃。

意图标志应该像这样使用:

Inten intent = new Intent();
intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
...

0
投票

在适配器构造函数中,必须初始化 mContext 变量。当将此适配器合并到活动中时,必须提供该活动的上下文。或者,您可以使用

this
关键字来提供必要的上下文。

© www.soinside.com 2019 - 2024. All rights reserved.