从另一个Activity调用方法(调用Fragment)

时间:2013-08-21 14:18:55

标签: java android actionbarsherlock fragment

我叫方法:

protected void ask(){

        Fragment newContent = new QuestionsFragment();
        ((MainActivity) getActivity()).switchContent(newContent, R.string.questions, MenuFragment.questions_id, BottomActionBarMode.QUESTIONS);
}

MainActivity: https://docs.google.com/file/d/0B30eXgoSJlFsczNSdkE5Qnc5eG8/edit?usp=sharing

错误:

  

08-21 17:16:28.574:E / AndroidRuntime(26360):致命异常:主要   08-21 17:16:28.574:E / AndroidRuntime(26360):java.lang.ClassCastException:com.chiv.successteritory.activities.AskLikeQuestionDetailsActivity无法强制转换为com.chiv.successteritory.activities.MainActivity

怎么打电话?提前谢谢

2 个答案:

答案 0 :(得分:2)

如果您在MainActivity并启动AskLikeQuestionDetailsActivity,则无法保证MainActivity仍然存在,因为操作系统可以在后台垃圾收集任何活动。

如果您希望在Fragment上调用MainActivity方法后ask()更改AskLikeQuestionDetailsActivity,我建议您执行以下操作:

MainActivity,而不是致电startActivity开始AskLikeQuestionDetailsActivity,请致电startActivityForResult并覆盖onActivityResult方法以更改Fragment收到的结果。

AskLikeQuestionDetailsActivity的{​​{1}}上,使用ask()和已配置的setResult致电Activity.RESULT_OK,将一些信息发送回Intent,然后致电MainActivity(如果您必须立即退出finish() AskLikeQuestionDetailsActivity)。

清楚吗?希望它有所帮助。

答案 1 :(得分:0)

在ask()AskLikeQuestionDetailsActivity:

Intent intent = new Intent(getActivity(), MainActivity.class);
        int condition = 1;
        intent.putExtra("condition", condition);
        startActivity(intent);

在onCreate()MainActivity.class中:

Bundle extras = getIntent().getExtras();
    if (extras != null) {
        showQuestions();
    }