2017-04-19 119 views
1

我正在创建一个活动,我希望在意向包中需要特定的额外内容。要求额外传递给活动

我想知道最好的做法是什么样的。计划不启动,或者如果捆绑包不包含特定的额外内容,则立即结束活动。我也想通知调用者一个错误,说明这样的情况。

+1

谁将会使用这个活动/威胁他们?只有你?你的开发团队的成员?您的直属团队之外的人(包括普通大众,如果这将用于分发图书馆)? – CommonsWare

+0

我的开发团队的成员 – erik

+0

我应该补充说,额外的将被调用的活动的公共静态枚举..出于参数的缘故,让我们调用该枚举模式并说它有两个值:A和B – erik

回答

2

该计划不启动,或者如果捆绑包没有包含特定的额外资源,则立即结束活动。

验证额外的onCreate(),如果额外缺失/无效,请致电finish()

我也想通知调用者一个错误声明这样的。

您可以将某些内容记录到LogCat。但是,您无权将异常抛入名为startActivity()的代码。

你可能会考虑上,要么活动产生某种形式的static辅助方法:

  • 只不过是组装的,你想要的方式Intent,或

  • 还继续运行并调用startActivity(),给予适当的Context

,并鼓励你的开发板的(使用该方法贿赂他们,用高尔夫球杆威胁他们等)。例如,在MyActivity,具有:

public static void start(Context ctxt, YourEnum value) { 
    Intent i=new Intent(ctxt, MyActivity.this).putExtra(EXTRA_THINGY, value); 

    ctxt.startActivity(i); 
} 

和您的团队成员可以拨打MyActivity.start(this, MyEnum.AWESOME);,开始您的活动。尽管(例如,如果他们自己创建了Intent,则不能强制编译时错误),但他们不能以编程方式执行此操作。

注意,高尔夫球杆就是一个例子,而不是例如最佳实践—,根据您的烘焙技能,你可以贿赂与cookies

+0

你是否建议我的活动应该如下所示: public static Intent IntentFactory(Context context,Mode mode){Intent intent = new Intent(); intent.setClass(context,MyNewActivity.class); intent.putExtra(Mode.class.getName(),mode.name()); return intent; } – erik

+0

@erik:抱歉,您的评论已被grue吃掉。我建议像'YourActivity。start()',其中'YourActivity'是你的活动,'start()'需要一个'Context'(用于启动活动),你的'enum'和其他任何可以打包成extras的东西。对于一组非常复杂的演员,您可以创建一个完整的“IntentBuilder” - 我通过CWAC-Cam2库获取该路线,以便组装一个合适的“Intent”。 – CommonsWare

+0

你能嘲笑我真的很快,以确保我的理解,这个助手在myactivity和“他们的活动”的例子称它吗? – erik