2014-09-05 3 views
0

У меня есть фрагменты A -> B -> C -> D. Каждый фрагмент, с помощью метода onCreateView, измените переменную String в основной Activity. Все работает отлично от A до B или C или D, но когда я нажимаю кнопку «Назад» - например, с C на B - мне нужно обновить переменную MainActivity до нужного значения. Как я могу это достичь? onResume(), onStart(), onCreateView не вызывается, когда я возвращаюсь к предыдущим фрагментам.Получить текущий видимый фрагмент Android

Редактировать, B C D является одним и тем же фрагментом класса, и может быть и фрагментами, потому что я реализую каталог папок с папкой подпапки B C D. Я не могу использовать теги, которые я думаю, потому что я не знаю, сколько у меня фрагментов.

ответ

2

Проверьте этот пример: https://stackoverflow.com/a/24042109/2413303

В принципе, указать идентификатор ресурса в конструкторе фрагмента:

public MyFragment() 
{ 
    super(); 
    titleId = R.string.drawer_myfragment_title; 
} 

Добавить (добавляемые в редактировании) следующий интерфейс:

public interface GetActionBarTitle 
{ 
    int getActionBarTitleId(); 
} 

Return это с интерфейсом:

public class MyFragment extends Fragment implements GetActionBarTitle 
{ 
    private int titleId; 

    @Override 
    public int getActionBarTitleId() 
    { 
     return titleId; 
    } 
} 

И в деятельности, добавьте следующие строки в onCreate() метода:

getSupportFragmentManager().addOnBackStackChangedListener(new OnBackStackChangedListener() 
{ 
    public void onBackStackChanged() 
    { 
     int backCount = getSupportFragmentManager().getBackStackEntryCount(); 
     if (backCount == 0) 
     { 
      finish(); 
     } 
     else 
     { 
      Fragment fragment = getSupportFragmentManager().findFragmentById(R.id.container); 
      mTitle = getString(((GetActionBarTitle) fragment).getActionBarTitleId()); 
      getSupportActionBar().setTitle(mTitle); 
     } 
    } 
}); 
+0

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

+0

добавлен код интерфейса – EpicPandaForce

0

Вы можете объявить метод в YourActivity для обновления.

А в фрагменте просто выполняются действия для вашего и метода вызова.

Например, в YourActivity декларировать метод:

public void refreshMe(){ 
... 
} 

Таким образом, в вашем фрагменте вы можете позвонить:

((YourActivity)getActivity()).refreshMe(); 
+0

Хорошо. Когда я могу назвать этот метод? –

+0

@ user3793870 \t in onAcivityCreated() например – Suvitruf

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