2013-08-21 3 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 все еще существует, так как ОС может мусор собирать любые мероприятия на фоне.

Если вы хотите изменить Fragment на MainActivity после того, как метод ask() вызывается AskLikeQuestionDetailsActivity, я хотел бы предложить вам сделать следующее:

На MainActivity, вместо вызова startActivity начать AskLikeQuestionDetailsActivity, вызовите startActivityForResult и переопределить onActivityResult способ изменения Fragment в зависимости от полученного результата.

На AskLikeQuestionDetailsActivity «s ask(), вызовите setResult с Activity.RESULT_OK и сконфигурированной Intent отправить некоторую информацию обратно MainActivity, а затем вызвать finish() (если у вас есть, чтобы выйти из AskLikeQuestionDetailsActivityActivity сразу).

Это понятно? Надеюсь, поможет.

+0

Спасибо, Это вариант, который я понимаю, но не знаю, как реализовать. Основная задача - вызвать фрагмент: QuestionsFragment – Forme

+0

Но почему вам нужно напрямую вызвать метод из другого фрагмента из другого объекта (который может быть даже не в памяти к тому времени, когда он вам нужен)? –

+0

Можно позвонить не напрямую. После запуска кода - [link] (https://docs.google.com/file/d/0B30eXgoSJlFsZWdqQ2ljS3A2Rnc/edit) мне нужно открыть фрагмент - [link] (https://docs.google.com/file/) д/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(); 
    }