2012-03-08 1 views
1

У меня есть пейджер, который содержит три фрагментаОбнаружение фрагмента на экране

adapter.addFragment (новый PlainColorFragment (Color.red));

adapter.addFragment (новый PlainColorFragment (Color.green));

adapter.addFragment (новый PlainColorFragment (Color.blue));

Мой вопрос заключается в том, можно ли обнаружить, что фрагментация имеет фокус или отображается пользователю.

Например, когда зеленый фрагмент является один на экране или имеет фокус, показать «тост» на экране

Я надеюсь, что я объяснил мой вопрос правильно.

благодарит

ответ

0

Вы можете установившие OnPageChangedListener к вашему ViewPager и показать другой тост в зависимости от положения.

2

Простой:

greenFragment.isVisible(); 

Если вы ищете какой-то события, вам придется управлять вручную, что там, где ваш переключающий фрагмент происходит, или в классе фрагмента, вы могли бы выполнить свой код в OnHiddenChanged события фрагмента (двойная проверка, конечно, что в настоящее время видно)

0

вы можете создать интерфейс, реализуя его в фрагменте, а затем, на родительской активности, вы можете реализовать BackStackChangedListener как в примере ниже:

public interface MyFragmentOnScreen { 

     public void onActiveFragment(); 
    } 

    public class MyFragment extends Fragment implements MyFragmentOnScreen{ 
     [...] 
     @Override 
    public void onActiveFragment() { 
//Things you should do when your fragment becomes active 
} 
    } 

public class MainActivity extends Activity { 
    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
[...] 
     getSupportFragmentManager().addOnBackStackChangedListener(
       new FragmentManager.OnBackStackChangedListener() { 
        public void onBackStackChanged() { 
         // Update your UI here. 
         Log.v(MainActivity.TAG, "Backstack changed"); 

          if (getSupportFragmentManager().findFragmentById(R.id.frMain) instanceof MyFragmentOnScreen) { 
           ((MyFragmentOnScreen) getSupportFragmentManager().findFragmentById(R.id.frMain)).onActiveFragment(); 
          } 
         } 
        } 
       }); 
} 
} 

где frMain является держателем в макете MainActivity для вашего фрагмента.