【问题标题】:startActivityForResult and replacing child activitystartActivityForResult 和替换子活动
【发布时间】:2013-07-12 05:54:05
【问题描述】:

我有三个活动,ActivityA、ActivityB 和 ActivityC。

就像今天的代码一样,ActivityA 将使用 startActivityForResult() 启动 ActivityB,并从 ActivityB 接收返回码。没问题。

我有另一个 Android 活动 ActivityC,它表示为 ActivityA 生成返回码的另一种方式。

我的问题是这样的:

是否可以让ActivityB创建ActivityC时,在ActivityC返回时调用ActivityA中的onActivityResult()方法?

我之所以问,是因为我记得一年前在某个 Android 项目中这样做过,但我不记得是哪一个,而且 Google 没有给我任何答案。

【问题讨论】:

    标签: java android


    【解决方案1】:

    我创建了 3 个活动。活动 A 为结果启动了活动 B,而活动 B 则简单地启动了活动 C 并在自身上调用了 finish()。活动 C 启动后,将结果设置为 A 想要的任何内容,并在 self 上调用完成。活动A中的onActivityResult被调用了,所以我相信答案是YES,可以做到。

    这是我的示例活动 活动 A:

    public class MainTestActivity extends Activity {
    
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_main_test);
    
            new Timer().schedule(new TimerTask() {
    
                @Override
                public void run() {
                    // TODO Auto-generated method stub
                    Intent in = new Intent(MainTestActivity.this, TestActivityB.class);
                    startActivityForResult(in, 101);
                }
            }, 2000);
        }
    
        @Override
        public boolean onCreateOptionsMenu(Menu menu) {
            // Inflate the menu; this adds items to the action bar if it is present.
            getMenuInflater().inflate(R.menu.main_test, menu);
            return true;
        }
    
        @Override
        protected void onActivityResult(int requestCode, int resultCode, Intent data) {
            // TODO Auto-generated method stub
            super.onActivityResult(requestCode, resultCode, data);
            Toast.makeText(this, "Got Intent", Toast.LENGTH_SHORT).show();
        }
    
    }
    

    活动 B:

    public class TestActivityB extends Activity {
    
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_main_test);
    
            new Timer().schedule(new TimerTask() {
    
                @Override
                public void run() {
                    // TODO Auto-generated method stub
                    Intent in = new Intent(TestActivityB.this, TestActivityC.class);
                    startActivity(in);
                    finish();
                }
            }, 2000);
        }
    
        @Override
        public boolean onCreateOptionsMenu(Menu menu) {
            // Inflate the menu; this adds items to the action bar if it is present.
            getMenuInflater().inflate(R.menu.main_test, menu);
            return true;
        }
    
    }
    

    活动 C:

    public class TestActivityC extends Activity {
    
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_main_test);
    
            new Timer().schedule(new TimerTask() {
    
                @Override
                public void run() {
                    // TODO Auto-generated method stub
                    setResult(101);
                    finish();
                }
            }, 2000);
        }
    
        @Override
        public boolean onCreateOptionsMenu(Menu menu) {
            // Inflate the menu; this adds items to the action bar if it is present.
            getMenuInflater().inflate(R.menu.main_test, menu);
            return true;
        }
    
    }
    

    【讨论】:

    • 我什至在 Activity B 中评论了finish()。当我通过按返回按钮销毁 Activity B 时,Activity A 能够显示 toast。
    • 不是我想做的,但它确实有效。很好的答案,谢谢。
    猜你喜欢
    • 1970-01-01
    • 2020-08-10
    • 2011-07-03
    • 2017-03-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多