- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我在从自定义 onClick 监听器中调用 Intent 上的 startActivity() 时遇到问题。代码编译得很好,但是当它到达执行的那个点时,我得到一个 nullPointerException。
代码
private static class ProverbAdapter extends ArrayAdapter<String> {
MainActivity ma;
public ProverbAdapter(Context context, int layout, int resId, String[] items) {
super(context, layout, resId, items);
this.ma = new MainActivity();
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
View row = convertView;
Context context = getContext();
if(row == null) {
row = LayoutInflater.from(context).inflate(R.layout.proverb_layout, parent, false);
}
String item = getItem(position);
TextView proverbDate = (TextView)row.findViewById(R.id.proverb_date);
TextView proverbText = (TextView)row.findViewById(R.id.proverb_content);
String[] data = item.split("----");
proverbDate.setText(data[0]);
proverbText.setText(data[1]);
ImageButton emailButton = (ImageButton)row.findViewById(R.id.emailButton);
ImageButton twitterButton = (ImageButton)row.findViewById(R.id.twitterButton);
ImageButton facebookButton = (ImageButton)row.findViewById(R.id.facebookButton);
emailButton.setOnClickListener(this.ma.new ProverbOnClickListener(data[0], data[1], "email", context));
twitterButton.setOnClickListener(this.ma.new ProverbOnClickListener(data[0], data[1], "twitter", context));
facebookButton.setOnClickListener(this.ma.new ProverbOnClickListener(data[0], data[1], "facebook", context));
return row;
}
}
public class ProverbOnClickListener implements OnClickListener {
String proverb_date, proverb_content, eventType;
Context context;
public ProverbOnClickListener(String proverb_date, String proverb_content, String eventType, Context context) {
this.proverb_date = proverb_date;
this.proverb_content = proverb_content;
this.eventType = eventType;
this.context = context;
}
@Override
public void onClick(View v) {
Toast.makeText(this.context, this.eventType + ": " + this.proverb_content, Toast.LENGTH_SHORT).show();
if(this.eventType == "email") {
Intent i = new Intent(Intent.ACTION_SEND);
i.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
i.setType("message/rfc822");
i.putExtra(Intent.EXTRA_EMAIL , new String[]{"recipient@example.com"});
i.putExtra(Intent.EXTRA_SUBJECT, "subject of email");
i.putExtra(Intent.EXTRA_TEXT , "body of email");
try {
context.startActivity(Intent.createChooser(i, "Send mail..."));
} catch (android.content.ActivityNotFoundException ex) {
Toast.makeText(this.context, "There are no email clients installed.", Toast.LENGTH_SHORT).show();
}
}
}
}
异常
FATAL EXCEPTION: main android.util.AndroidRuntimeException: Calling startActivity() from outside of an Activity context requires the FLAG_ACTIVITY_NEW_TASK flag. Is this really what you want?
我按照编译器的建议添加了新标志,但它仍然因相同的错误而崩溃。
* *编辑 ****
遵循第一个响应中的建议后,我的适配器现在看起来像:
private static class ProverbAdapter extends ArrayAdapter<String> {
Context context;
public ProverbAdapter(Context context, int layout, int resId, String[] items) {
super(context, layout, resId, items);
this.context = context;
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
View row = convertView;
if(row == null) {
LayoutInflater li = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
row = li.inflate(R.layout.proverb_layout, parent, false);
}
String item = getItem(position);
TextView proverbDate = (TextView)row.findViewById(R.id.proverb_date);
TextView proverbText = (TextView)row.findViewById(R.id.proverb_content);
String[] data = item.split("----");
proverbDate.setText(data[0]);
proverbText.setText(data[1]);
ImageButton emailButton = (ImageButton)row.findViewById(R.id.emailButton);
ImageButton twitterButton = (ImageButton)row.findViewById(R.id.twitterButton);
ImageButton facebookButton = (ImageButton)row.findViewById(R.id.facebookButton);
emailButton.setOnClickListener(new ProverbOnClickListener(data[0], data[1], "email", context));
twitterButton.setOnClickListener(new ProverbOnClickListener(data[0], data[1], "twitter", context));
facebookButton.setOnClickListener(new ProverbOnClickListener(data[0], data[1], "facebook", context));
return row;
}
}
但是我收到编译错误。
No enclosing instance type of MainActivity is accessible.
最佳答案
尝试一些修改
this.ma = new MainActivity(); //it is wrong
不实例化 Activity
尝试这样
Context context;
public ProverbAdapter(Context context, int layout, int resId, String[] items) {
super(context, layout, resId, items);
this.context=context;
}
在需要上下文的地方使用这个变量上下文
关于java - Android FLAG_ACTIVITY_NEW_TASK 不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15274347/
我有一个小部件,我可以从中开始两项 Activity : public final void onUpdate(final Context context, final AppWidgetManage
是否有忽略 FLAG_ACTIVITY_NEW_TASK 的情况?我从一个服务开始一个 Activity ,其 Intent 是设置该标志,当主要 Activity 在后台时,我希望在新任务中看到新
我在应用程序未激活的某个日期和时间显示对话框(具有对话框主题的 Activity ;否则无法执行)。 if (!Utils.isApplicationInForeground(context)) {
我创建了一个带有按钮的简单应用程序。单击它会触发通知,单击通知会启动同一应用程序的新实例。但是,我希望通过单击通知将我带回到触发通知的应用程序实例。为此,我查阅了 Android 文档中的 FLAG_
假设一个应用程序已经有一堆 Activity ,然后一个新的 Activity 从带有 FLAG_ACTIVITY_NEW_TASK 的应用程序上下文中启动。这发生在同一个进程中,即在应用程序内部,如
启动新 Activity 时,我遇到了关于 FLAG_ACTIVITY_NEW_TASK 标志的问题。 目前我有 2 个应用程序:应用程序 A 仅包含一个服务,它可以启动应用程序 B 的主要 Acti
我在从自定义 onClick 监听器中调用 Intent 上的 startActivity() 时遇到问题。代码编译得很好,但是当它到达执行的那个点时,我得到一个 nullPointerExcepti
我想在自定义微调器中使用分享按钮 这是我的代码: btnShareCS_One.setOnClickListener(new OnClickListener() { @Override
在我的应用程序中,我有一个可扩展 ListView ,我想在单击特定子项时打开从 Internet 下载的 PDF。当我点击它时,应用程序崩溃并且在 Android Studio 的 Android
我有一个报警项目,在 AlarmReceiver 我有这个代码。 错误是标志无法使用,Android Studio 说 FLAG_ACTIVITY_NEW_TASK 未列在可用的 Intent 标志中
我为我工作的公司创建了一个通用的可重用类,用于创建一些通用的界面元素。 该类在构造中采用单个参数:应用程序上下文。 方法之一,ContentClickableRowWithIcon 允许您传入一个用作
所以我的问题是: 我启动 App1,打开 Screen1,然后打开 Screen2。 我按 Home,将 App1 留在后台。 我打开 App2,使用 FLAG_ACTIVITY_NEW_TASK 启
我一直在测试 Intent 标志,但我需要澄清一些事情。我的抽屉导航中有两个项目,单击我执行此操作, Intent intent = new Intent(this, activityClazz);
这是我的场景:我有一系列 Activity .我对那些 Activity 设置了超时这将断开用户的连接,以防它暂时处于非 Activity 状态。但我想将用户重定向到最后一个屏幕,以防他登录 当我断开
我有一个使用 FLAG_ACTIVITY_NEW_TASK 启动 Activity B 的通知。 documentation说: [...] if a task is already running
好的,请耐心等待 我的应用程序由初始屏幕 Activity (A) 和主要 Activity (B) 组成。当应用程序启动时,(A) 会显示一会儿,然后它会启动 (B)。然后(A)完成。这在“正常”条
我有一项服务可以在 30 到 30 秒内调用网络服务器。如果返回某个值,我需要开始特定的 Activity 。问题是从服务开始 Activity 我需要设置 intent.setFlags(Inten
我正在使用 Xamarin,当我单击具有电话号码链接的 TextView 时,我的模拟器执行错误。 应用程序输出具有以下输出: [MessageQueue-JNI] Exception in Mess
我的 Activity 以 singleTop 模式和 C2DM 接收器运行。根据某些通知,我需要运行该 Activity ,并且我是这样做的: Intent activity = new Inten
在 Notification 类的文档中,我看到了这个: public PendingIntent contentIntent The intent to execute when the expan
我是一名优秀的程序员,十分优秀!