gpt4 book ai didi

java - Android FLAG_ACTIVITY_NEW_TASK 不起作用

转载 作者:行者123 更新时间:2023-12-02 07:13:03 24 4
gpt4 key购买 nike

我在从自定义 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/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com