【问题标题】:startActivityForResult in MainActivityMainActivity 中的 startActivityForResult
【发布时间】:2014-09-02 15:10:13
【问题描述】:

我的 MainActivity 中有这段代码:

public View onCreateView(LayoutInflater inflater, ViewGroup container,
                Bundle savedInstanceState) {
            View rootView=null;
            if (getArguments().getInt(ARG_SECTION_NUMBER)==1){
                rootView = inflater.inflate(R.layout.fragment_main, container, false);
                final Button newProdButton = (Button) rootView.findViewById(R.id.new_prod_button);
                newProdButton.setOnClickListener(new View.OnClickListener() {
                    @Override
                     public void onClick(View v) {
                        Intent intent = new Intent (getActivity(), NewProdActivity.class);
                        startActivityForResult (intent, OK_NEW_PRODUCT);
                        }

                });

然后:

public void onActivityResult(int requestCode, int resultCode, Intent data) {     
        super.onActivityResult(requestCode, resultCode, data); 
        if (requestCode==OK_NEW_PRODUCT){
            if (resultCode == Activity.RESULT_OK) { 
              Intent intent = new Intent (MainActivity.this, ProductActivity.class);
              startActivity(intent);

           }
        } 
      }

目的是在第一个活动结束时启动第二个活动,以防后者成功执行所有操作。

但是,当我结束第一个任务时,什么也没有发生,应用程序仍保留在 MainActivity 上。为什么?

【问题讨论】:

  • 你试过 =>resultCode == RESULT_OK 而不是 resultCode == Activity.RESULT_OK 吗?
  • 添加一些登录onActivityResult方法以确保程序在完成第一个活动时已经运行。如果没有,请在完成第一个活动时调用setResult方法。
  • 我问你一些事情只是为了确认,你确定你的第一个活动是一个活动而不是一个片段吗?
  • 我认为它是一个片段
  • @Simone11489 : 请让我们知道它是否是一个片段,即它是扩展Activity 类还是Fragment 类?

标签: android android-activity startactivityforresult


【解决方案1】:

当达到onActivityResult 时,检查requestCoderesultCode 的值。 确实,如果第一个Activity没有调用setResult(RESULT_OK),android会为你返回RESULT_CANCELED,而第二个startActivity调用永远也达不到。

【讨论】:

  • 相同的值 OK_NEW_PRODUCT=0
  • 您可能会收到RESULT_CANCELED。如果你没有显式调用SetResult(RESULT_OK),Android 会为你设置RESULT_CANCELED
  • 您能否编辑您的答案@HappyCactus,以包含您评论中的信息?作为一个独立的答案,它只是一个评论(并且是被删除的候选者)。
  • @ChrisForrence 谢谢,完成了 只是一个盲目的镜头:删除 super.onActivityResult 调用。应该不是问题,但是没用。
【解决方案2】:

你必须setResult(RESULT_OK)才能完成第一个活动

【讨论】:

  • 完成:在我的其他活动中:setResult(Activity.RESULT_OK);完成();
  • 如果您指的是 eclipse 日志,它不会给我任何回报
【解决方案3】:

我通过以下方式解决了编写代码的问题:

getActivity().startActivityForResult (intent, OK_NEW_PRODUCT);

【讨论】:

  • 不完全是:如果我按照你的方式做(将 .getActivity 放在 onActivityResult 方法中)我有这个错误:方法 getActivity() 未定义为 MainActivity 类型
  • 如果此答案对您有用,请点击您的答案下方的“正确标记”接受它。
【解决方案4】:

您的MainActivity 代码表明它是一个片段。如果是这样,那么使用:

getActivity().startActivityForResult (intent, OK_NEW_PRODUCT);

代替:

startActivityForResult (intent, OK_NEW_PRODUCT);

【讨论】:

  • 您在此处为MainActivity 发布的代码包含getActivity()。不是吗?您确定您发布的代码与您在eclipse 中的代码完全相同吗?
  • 错误答案?这是什么意思?如果您解决了问题并发布了对您有用的答案,则接受该答案,即点击答案下方的“正确标记”。
猜你喜欢
  • 1970-01-01
  • 2018-05-28
  • 2019-06-03
  • 2016-09-04
  • 1970-01-01
  • 1970-01-01
  • 2018-09-23
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多