【问题标题】:setResult is not calling parent activity backsetResult 没有回调父活动
【发布时间】:2015-08-06 22:12:24
【问题描述】:

尝试将 setResult 返回父活动时发生了一些奇怪的事情 onActivityResult 方法未执行,我的应用程序终止 这是父母

@Override
    protected void onCreate(Bundle savedInstanceState) {

            super.onCreate(savedInstanceState);
            Log.d("MyAPP","Access Calendar");
            //Getting the token back from authorization process
            accessToken = getIntent().getExtras().getString("token");
            // Setting up Calendar API Service
            setupCalendarConnection();
            startActivityForResult(intent.setClass(this, CalendarTasks.class),REQUEST_CAL_TASK);

    }
 @Override
        protected void onActivityResult(int requestCode, int resultCode, Intent data) {

            Log.d("MyAPP", "result arrived");

            if(requestCode==REQUEST_CAL_TASK){
                switch (resultCode){
                    case CREATE_EVENT:
                        getUserCalendars();
                        break;
                    case QUICKADD_EVENT:
                        getUserCalendars();
                        startActivityForResult(intent.setClass(this, CalendarQuickAddActivity.class),REQUEST_CAL_ACT);
                        break;
                    case VIEW_EVENTS:
                        getUserCalendars();   
                        break;
                    case CREATE_CALENDAR:
                        getUserCalendars();
                        break;
                    case EDIT_CALENDAR:
                        getUserCalendars(); 
                        break;
                }
            }

            super.onActivityResult(requestCode, resultCode, data);
        }

这是子活动

listView.setOnItemClickListener(new OnItemClickListener(){

            public void onItemClick(AdapterView<?> parent, View view, int position, long id) {

                listIndex=position;
                Log.d("MyAPP", ""+position);

                switch (listIndex){
                    case 0:
                        Log.d("MyAPP","case 0"+listIndex);
                        setResult(CREATE_EVENT);
                        finish();
                        break;
                    case 1:{

                        Log.d("MyAPP","case 1"+listIndex);
                        setResult(QUICKADD_EVENT);
                        finish();
                        break;
                    }
                    case 2:
                        Log.d("MyAPP","case 2"+listIndex);
                        setResult(VIEW_EVENTS);
                        finish();
                        break;
                    case 3:
                        Log.d("MyAPP","case 3"+listIndex);
                        setResult(CREATE_CALENDAR);
                        finish();
                        break;
                    case 4:
                        Log.d("MyAPP","case 4"+listIndex);
                        setResult(EDIT_CALENDAR);  
                        finish();
                        break;
                }

            }

        });

我正在检查案例 1,并且 Log cat 打印出正确的日志,但在 onActivityResut 方法中没有打印该日志,这意味着它不会返回,我不知道这背后的原因。 我移动了 switch 块来覆盖 finish() 方法,我遇到了同样的问题。

【问题讨论】:

    标签: android android-activity


    【解决方案1】:

    线,

    startActivityForResult(intent.setClass(this, CalendarQuickAddActivity.class), REQUEST_CAL_ACT);
    

    确保您的结果返回到CalendarQuickAddActivity。这是你想要的吗?

    另外,变量intent 到底是什么?是全球性的吗?这有点令人困惑...您可能只想用new Intent(this, CalendarQuickAddActivity.class) 创建一个新的Intent 以使您的代码更具可读性。

    【讨论】:

    • 感谢您的回复,问题出现在第一个活动调用“startActivityForResult(intent.setClass(this, CalendarTasks.class),REQUEST_CAL_TASK);”中。它应该将结果返回给父活动,以便我可以执行您提到的行,其中 CalendarQuickAddActivity 是我要为 CalendarTasks 类的结果执行的类(问题是甚至没有执行 onActivityResult)。是的,意图是父活动中的一个全局变量,我在不同的活动调用中使用它。
    【解决方案2】:

    如果您使用的是 ActivityGroup 或 TabGroupActivity,那么您需要覆盖 handleActivityResult(requestCode, resultCode, data) 而不是 onActivityResult(requestCode, resultCode, data)。

    【讨论】:

    • 谢谢,但我也没有使用
    【解决方案3】:

    你需要调用 startActivityForResult 然后它才会返回

    startActivityForResult(intent.setClass(this, CalendarQuickAddActivity.class), REQUEST_CAL_ACT);
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-05-08
      • 2015-03-03
      • 2011-05-08
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多