首页 > 编程知识 正文

android,startactivity结果

时间:2023-05-03 19:39:14 阅读:119148 作者:1475

从安卓-活动上下文外部启动活动(

我在安卓APP上实现了上下文。 使用Activity类的自定义子类绑定到此ListView。 已将OnClickListener .分配给重新编写的ArrayAdapter.getView (. )方法。 我想用onClick的onClick方法开始新的活动。 我得到了例外:

Calling startActivity () fromoutsideofanactivitycontextrequiresthe

flag _ activity _ new _ task flag.isthisreallywhatyouwant?

如何获取正在运行ListView (当前活动)的上下文?

21个解决方案

467电压

或者

从适配器中的构造函数缓存上下文对象,或

从你的观点来看。

或者作为最后的手段

-将- FLAG_ACTIVITY_NEW_TASK标记添加到意图中:

_

my intent.setflags (intent.flag _ activity _ new _ task );

编辑-避免设置标志。 因为这会干扰正常的事件流和历史堆栈。

坚固的烤鸡volovoyanswered 2019-02-11t 10336026336036 z

80伏特

要实现这一点,请使用addFlags而不是setFlags

my intent.add flags (intent.flag _ activity _ new _ task );

根据文件,请执行以下操作

向intent添加其他标志(或使用现有标志值)。

编辑

使用改变历史堆栈的徽标时,坚固的烤鸡肉串Volovoy的回答如下。

.请不要设置标志。 因为这会妨碍事件和历史堆栈的正常流程。

brunobierianswered 2019-02-11t 10336027336032 z

45伏特

使用(getApplicationContext )代替YourActivity.this

jeffreynyaukeanswered 2019-02-11t 10336027336058 z

21电压

如果由于如下创建选择器而发生错误:

intentsharingintent=new intent (intent.action _ view;

sharing intent.add flags (intent.flag _ activity _ new _ task;

sharing intent.setdata (uri.parse (http://谷歌.com);

开始活动(intent.create chooser ) sharingintent,' Open With ' );

通过设置标志创建选择器,如下所示:

intentsharingintent=new intent (intent.action _ view;

sharing intent.add flags (intent.flag _ activity _ new _ task;

sharing intent.setdata (uri.parse (http://谷歌.com);

intentchooserintent=intent.create chooser (sharing intent,' Open With ';

chooser intent.add flags (intent.flag _ activity _ new _ task;

sart activity (选择内容);

sanath _ p answered 2019-02-11t 10336028336033 z

13电压

我想你可能在错误的地方实施了OnClickListener -。 通常,您应该在您的Activity中实现OnItemClickListener并将其设置为ListView。 否则,你的案件会发生问题……。

mreicheltanswered 2019-02-11t 10336028336059 z

10电压

另外,如果要在剪辑视图中显示链接,请不要这样创建

适配器=new list adapter (get activity ).getApplicationContext ),mStrings );

打电话

适配器=新列表适配器(获取活动)、mStrings );

适配器在这两种情况下都工作,但链接仅适用于最后一个。

djdance ans

wered 2019-02-11T10:29:39Z

7 votes

CustomAdapter mAdapter = new CustomAdapter( getApplicationContext(), yourlist);

要么

Context mContext = getAppliactionContext();

CustomAdapter mAdapter = new CustomAdapter( mContext, yourlist);

改为以下

CustomAdapter mAdapter = new CustomAdapter( this, yourlist);

Murtaza Ashraf answered 2019-02-11T10:30:08Z

5 votes

如果您在某个方法中在侦听器中创建意图,请参阅

override onClick (View v).

然后通过这个视图调用上下文:

v.getContext ()

甚至不需要SetFlags ......

Paulo Linhares - Packapps answered 2019-02-11T10:30:48Z

3 votes

对于任何人在Xamarin.Android(MonoDroid)上获取此功能,即使从活动中调用StartActivity - 这实际上是新的ART运行时的Xamarin错误,请参阅[https://bugzilla.xamarin.com/show_bug.cgi?id=17630]

rouen answered 2019-02-11T10:31:16Z

3 votes

当startactivity不知道他的活动是什么时,会出现此错误。 所以你必须在startActivity()之前添加活动

你必须设置

activity.startActivity(yourIntent);

Cabezas answered 2019-02-11T10:31:49Z

2 votes

在我看来,最好在你的Activity.class的代码中使用startActivity()的方法。如果你在Adapter或其他类中使用它,它将导致它。

kaosmys answered 2019-02-11T10:32:17Z

2 votes

详细阐述强健的烤鸡 Volovoy的答案 -

如果您通过片段获得此问题,getActivity()可以正常工作以获取上下文

在其他情况下:

如果你不想使用 -

myIntent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);//not recommend

然后在你的OutsideClass中创建一个这样的函数 -

public void gettingContext(Context context){

real_context = context;//where real_context is a global variable of type Context

}

现在,在你的主要活动中,稳重的棉花糖定义外部类,并将活动的上下文作为参数时,你立即调用上面的方法。在你的主要活动中也有一个功能 -

public void startNewActivity(final String activity_to_start) {

if(activity_to_start.equals("ACTIVITY_KEY"));

//ACTIVITY_KEY-is a custom key,just to

//differentiate different activities

Intent i = new Intent(MainActivity.this, ActivityToStartName.class);

activity_context.startActivity(i);

}//you can make a if-else ladder or use switch-case

现在回到你的OutsideClass,并开始新的活动做这样的事情 -

@Override

public void onClick(View v) {

........

case R.id.any_button:

MainActivity mainAct = (MainActivity) real_context;

mainAct.startNewActivity("ACTIVITY_KEY");

break;

}

........

}

这样你就可以开始从不同的OutsideClass调用的不同活动而不会弄乱标志。

注意 - 尽量不要通过构造函数为片段缓存上下文对象(使用适配器,它很好)。片段应该有一个空构造函数,否则应用程序在某些情况下崩溃。

记得打电话

OutsideClass.gettingContext(Context context);

在onResume()函数中也是如此。

Flying Monkey answered 2019-02-11T10:33:53Z

2 votes

我也有同样的问题。 检查您已通过的所有上下文。 对于“链接”,它需要Activity Context而不是Application context。

这是您应该检查的地方:

1.)如果您使用了LayoutInflater,那么请检查您传递的上下文。

2.)如果您使用任何适配器,请检查您已通过的上下文。

codemaniac answered 2019-02-11T10:34:40Z

2 votes

我有同样的问题。 问题在于背景。 如果要打开任何链接(例如,通过选择器共享任何链接),请传递活动上下文,而不是应用程序上下文。

如果您不在活动中,请不要忘记添加myIntent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK)。

Coder29 answered 2019-02-11T10:35:16Z

1 votes

Intent viewIntent = new Intent(Settings.ACTION_LOCATION_SOURCE_SETTINGS);

viewIntent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);

startActivity(viewIntent);

我希望这会奏效。

Chirag Patel answered 2019-02-11T10:35:55Z

1 votes

面对同样的问题,然后实施

intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);

并解决了这个问题。

可能存在与列表视图适配器相关的另一个原因。

你可以看到这个博客,描述得很好。

Mayank Sharma answered 2019-02-11T10:36:49Z

1 votes

使用此代码。 对我来说很好;从活动外部分享一些东西

Intent intent = new Intent(Intent.ACTION_SEND);

intent.setType("text/plain");

// Append Text

String Text = "Your Text Here"

intent.putExtra(Intent.EXTRA_TEXT, Text);

intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);

Intent shareIntent = Intent.createChooser(intent,"Share . . . ");

shareIntent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);

G.context.getApplicationContext().startActivity(shareIntent);

Pooya Hayati answered 2019-02-11T10:37:18Z

0 votes

Intent i= new Intent(context, NextActivity.class);

i.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_SINGLE_TOP);

Chandan Lal answered 2019-02-11T10:37:43Z

0 votes

如果您在Cordova插件中调用共享Intent,设置Flag将无济于事。 而是使用这个 -

cordova.getActivity().startActivity(Intent.createChooser(shareIntent, "title"));

Sandeep Kumar answered 2019-02-11T10:38:11Z

0 votes

我的情况有点不同,我正在使用or测试我的应用程序,我不得不从仪器Intent.FLAG_ACTIVITY_NEW_TASK(这不是来自Activity的那个)启动我的活动|。

fun intent(context: Context) = Intent(context, HomeActivity::class.java)

.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP)

我不得不更改标志并添加or按位(在Java中为|)和Intent.FLAG_ACTIVITY_NEW_TASK

因此它导致:

fun intent(context: Context) = Intent(context, HomeActivity::class.java)

.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP or Intent.FLAG_ACTIVITY_NEW_TASK)

Rafael Ruiz Muñoz answered 2019-02-11T10:38:54Z

0 votes

由于添加标志会影响event_flow和stack_history,因此最好通过以下方式将“应用程序上下文”传递给需要调用活动类的非活动:

“ActivityClassName.this”(当您以这种方式传递上下文时,它将包含从非活动场景调用活动所需的所有详细信息和信息)

所以不需要设置或添加标志,这在每种情况下都可以正常工作。

Musthafa answered 2019-02-11T10:39:36Z

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。