启动一个活动并从非活动的descadent类中捕获结果

时间:2012-01-09 22:38:32

标签: android android-intent

我有一些类实现了某种可视化片段。 (我称之为ApetWidgets。) 他们有自己的类层次结构。

public class SignatureApetWidget extends AbstractApetWidget {

   private void startCapture(ApetActivity act) {
      Intent intent = new Intent(act, SignatureCaptureActivity.class);
      intent.putExtra(...);

      act.startActivityForResult(intent, CAPTURE_SIGNATURE_REQUEST);
   }

其中一个应该启动另一个Activity并等待结果。但是,虽然我有对包含窗口小部件的活动的引用,虽然我可以调用parentActivity的startActivityForResult,但我无法拦截结果,因为这也会转到父活动。

我可以通过它捕获结果,并将处理委托给我的小部件,但这似乎是不好的做法,因为我必须将小部件特定的逻辑从小部件移动到活动,更重要的是:我会有在我计划使用小部件的所有活动类中实现此委派。)

我知道如何(至少我知道一种方式)开始其他活动。 (它工作正常。)但是,我没有得到任何结果。 扩展和继承Activity或任何其他类不是一个选项(我的小部件有自己的类层次结构)。

所以我的问题是:如何在非活动类中启动结果活动而不会严重地推断封装条款?

谢谢, 巴拉热

2 个答案:

答案 0 :(得分:2)

我认为最好的方法是使用接口和监听器。如果您使用片段http://developer.android.com/guide/topics/fundamentals/fragments.html作为父类,则无需执行此操作,这就是谷歌创建它们的原因。

基本上当你的活动触发onActivityResult(int requestCode,int resultCode,Intent data)时,你应该在ApetWidgets中调用正确的函数。您不必在Activity中添加任何特定代码,然后将信息传递给您的小部件。再一次,如果您使用Fragment,则所有活动生命周期方法都已委派并准备覆盖。

答案 1 :(得分:0)

我用过这样的结构。首先 - 在您的小部件中实现回调方法。第二 - 将意图链接到您的小部件。第三 - 从您的Activity调用小部件回调方法。

顺便说一下 - 听起来你的代码设计有问题。如果你想从secod Activity获得一些依赖于用户的结果,那么更好的方法是在Activity类中处理结果,而不是widget。