2016-07-28 2 views
-2

Я несколько раз пытался вызвать метод Возобновления MainActivity из Фрагмента, , вызывающий просто onResume(); ничего в результате. код резюме методаРезюме Деятельность из фрагмента

protected void onResume() { 
     all.clear(); 
     outgoing.clear(); 
     incoming.clear(); 
     getFromSdcard(); 
     super.onResume(); 
    } 

Я хочу, чтобы вызвать этот метод из фрагмента.

+0

Активность содержит фрагмент. Что именно нужно для его возобновления? –

+0

Я написал некоторую логику в методе возобновления, поэтому я хочу позвонить после события из фрагмента. –

+0

Опубликуйте код, так что теперь мы можем сделать то, что вы уже пробовали. – FlyingPumba

ответ

1

Повышение ответ @ cricket_007:

Вы можете вызвать onResume от родительской деятельности, но так же, как вы уже видели, onResume имеет защищенный доступ блокирует вас от вызова его.
Существует небольшое обходное средство видимости, которое позволяет вам это делать.

1 - Реализуйте этот метод на вашей деятельности

public void myOnResume(){ 
    this.onResume(); 
} 

2 - Тогда на вашем фрагменте вы можете вызвать

public void myFragmentMethod(){ 
    // make sure to double check casts (to YourActivity) like these before invoking 
    ((YourActivity) getActivity()).myOnResume(); 
} 

Заключение и рекомендации: Даже если это не рекомендуется, чтобы вы реализовали его таким образом, это можно сделать, как я уже сказал.

На мой взгляд, то, что вы должны сделать, это:

1 - Есть все функциональные возможности вашего onResume() метод внутри надлежащего метода собственный (вы называете это!), Как:

public void clearData() { 
     all.clear(); 
     outgoing.clear(); 
     incoming.clear(); 
     getFromSdcard(); 
    } 

2 - Тогда вы могли бы просто все эти отдельные функциональные из onResume() и до сих пор они вызываются как

protected void onResume() { 
    super.onResume(); 
    clearData(); 
} 

3 - Вызвать его на фрагменте как (показано ранее)

public void myFragmentMethod(){ 
     // make sure to double check casts (to YourActivity) like these before invoking 
     ((YourActivity) getActivity()).clearData(); 
    } 

Позвольте мне знать, как это пошло. С уважением,

+0

Он работает отлично, но у меня есть другое решение, которое просто создает статический метод в Activity и вызывается просто в фрагменте. –

+2

Привет, Piyush. Несмотря на это, настоятельно рекомендуется не использовать статические методы для работы с жизненным циклом активности. Конечно, это основано на принципах хорошего дизайна! Статические методы должны использоваться для обработки данных и выполнения операций, не связанных с жизненным циклом. Например, вы можете объявить открытый static int getTwice (значение int); потому что его цель - простое вычисление и не привязана ни к чему (вы просто вызываете метод на число, и он дает вам двойное число, простое как это). В любом случае, вы можете сделать это со статическим методом –

0

Вы вызываете Фрагменты onResume()

Вы можете попробовать getActivity().onResume(), но вы действительно должны сделать метод, чтобы делать то, что код, который нужно, а не явно вызывать методы жизненного цикла.

+0

Я попытался, но получил ошибку «метод - это защищенный доступ в родительском классе». –

Смежные вопросы