2013-08-21 136 views
0

我呼籲方法:從另一個活動調用一個方法(稱爲片段)

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

回答

2

如果你是在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

0

在問()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(); 
    } 
相關問題