从另一个活动调用一个方法(称为片段)

问题描述:

我呼吁方法:从另一个活动调用一个方法(称为片段)

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): FATAL EXCEPTION: main 08-21 17:16:28.574: E/AndroidRuntime(26360): java.lang.ClassCastException: com.chiv.successteritory.activities.AskLikeQuestionDetailsActivity cannot be cast to com.chiv.successteritory.activities.MainActivity

怎么称呼?在此先感谢

+0

在这个麻烦'(MainActivity)getActivity()' –

+1

尝试'(AskLikeQuestionDetailsActivity)getActivity( )' –

+0

@LiaPronina但是这个类很可能没有'switchContent'方法。 – m0skit0

如果你是在MainActivity并启动AskLikeQuestionDetailsActivity,它不能保证MainActivity仍然存在,作为操作系统可以垃圾收集背景的任何活动。

如果你想在MainActivity更改Fragmentask()方法被调用AskLikeQuestionDetailsActivity后,我会建议你做以下几点:

MainActivity,而不是调用startActivity开始AskLikeQuestionDetailsActivity,叫startActivityForResult和覆盖onActivityResult根据收到的结果更改Fragment的方法。

AskLikeQuestionDetailsActivityask(),调用setResultActivity.RESULT_OK和配置Intent发送一些信息反馈给MainActivity,然后调用finish()(如果你有退出AskLikeQuestionDetailsActivityActivity马上)。

是否清楚?希望能帮助到你。

+0

谢谢,这是我理解的一个选项,但不知道如何实现。 主要任务是调用片段:QuestionsFragment – Forme

+0

但是,为什么您需要直接从另一个Activity的另一个Fragment调用另一个方法的方法(它甚至可能在您需要的时候甚至不在内存中)? –

+0

可以不直接打电话。运行代码后 - [链接](https://docs.google.com/file/d/0B30eXgoSJlFsZWdqQ2ljS3A2Rnc/edit)我必须打开片段 - [link](https://docs.google.com/file/ d/0B30eXgoSJlFsSWtFNFFFaDNEZFk /编辑) – Forme

在问()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(); 
    }