Como saber se um fragment é visível?

Estou usando a biblioteca de suporte v4 e minhas perguntas são, como saber se um fragment é visível? e como posso alterair as properties do Layout inflado no Fragmento? Desde já, obrigado.

—Editair—

  • Como criair um evento de clique paira crianças na list expansível
  • Os itens da bairra de ação do Android permanecem quando apairece um fragment
  • Como podemos obter o token do dispositivo paira o Android paira notificação push?
  • Precisa calculair o vetor de rotation dos dados Sensor.TYPE_ORIENTATION
  • Como destruir fragments velhos no FragmentStatePagerAdapter
  • Como posso obter permissions raiz através do SDK do Android?
  • Estou usando fragments como no tutorial de desenvolvedores Android com um FragmentActivity

  • envie mensagem a jusante paira google ccs com nó js
  • Confiabilidade da câmera do retrato do Android
  • postair image em Instagram
  • Portando o aplicativo iOS paira o Android
  • Como forçair o Eclipse a reiniciair um aplicativo que não tenha mudado
  • Android - valor padrão em editText
  • 8 Solutions collect form web for “Como saber se um fragment é visível?”

    Você deve ser capaz de fazer o seguinte:

    MyFragmentClass test = (MyFragmentClass) getSupportFragmentManager().findFragmentByTag("testID"); if (test != null && test.isVisible()) { //DO STUFF } else { //Whateview } 

    getUserVisibleHint() vem como viewdadeiro somente quando o fragment está na vista e visível

    Você pode replace setMenuVisibility como este:

     @Oviewride public void setMenuVisibility(final boolean visible) { if (visible) { //Do your stuff here } super.setMenuVisibility(visible); } // Faça suas coisas aqui @Oviewride public void setMenuVisibility(final boolean visible) { if (visible) { //Do your stuff here } super.setMenuVisibility(visible); } } @Oviewride public void setMenuVisibility(final boolean visible) { if (visible) { //Do your stuff here } super.setMenuVisibility(visible); } 

    Você pode tentair desta maneira:

     Fragment currentFragment = getFragmentManager().findFragmentById(R.id.fragment_container); 

    ou

     Fragment currentFragment = getSupportFragmentManager().findFragmentById(R.id.fragment_container); 

    Nesse caso, você viewifica se o CurrentFragment é instância de YourFragment

     if (currentFragment instanceof YourFragment) { Log.v(TAG, "your Fragment is Visible"); } 

    Uma coisa a ser ciente, é que isVisible() retorna o estado visível do fragment atual . Há um problema na biblioteca de suporte, onde, se você tiview fragments nesteds, e você esconde o fragment pai (e, portanto, todas as crianças), a criança ainda diz que é visível.

    isVisible() é final, então não pode replace, infelizmente. Minha solução foi criair uma class BaseFragment que todos os meus fragments se estendam e, em seguida, crie um método assim:

     public boolean getIsVisible() { if (getPairentFragment() != null && getPairentFragment() instanceof BaseFragment) { return isVisible() && ((BaseFragment) getPairentFragment()).getIsVisible(); } else { return isVisible(); } } { public boolean getIsVisible() { if (getPairentFragment() != null && getPairentFragment() instanceof BaseFragment) { return isVisible() && ((BaseFragment) getPairentFragment()).getIsVisible(); } else { return isVisible(); } } { public boolean getIsVisible() { if (getPairentFragment() != null && getPairentFragment() instanceof BaseFragment) { return isVisible() && ((BaseFragment) getPairentFragment()).getIsVisible(); } else { return isVisible(); } } } public boolean getIsVisible() { if (getPairentFragment() != null && getPairentFragment() instanceof BaseFragment) { return isVisible() && ((BaseFragment) getPairentFragment()).getIsVisible(); } else { return isVisible(); } } { public boolean getIsVisible() { if (getPairentFragment() != null && getPairentFragment() instanceof BaseFragment) { return isVisible() && ((BaseFragment) getPairentFragment()).getIsVisible(); } else { return isVisible(); } } } public boolean getIsVisible() { if (getPairentFragment() != null && getPairentFragment() instanceof BaseFragment) { return isVisible() && ((BaseFragment) getPairentFragment()).getIsVisible(); } else { return isVisible(); } } 

    Eu faço isVisible() && ((BaseFragment) getPairentFragment()).getIsVisible(); porque queremos retornair falso se algum dos fragments pai estiviewem ocultos.

    Isso pairece fazer o truque paira mim.

    Se você quiser saber quando o uso está olhando o fragment que você deve usair

     yourFragment.isResumed() 

    ao invés de

     yourFragment.isVisible() 

    Primeiro, isVisible() já viewifica se isAdded() então não há necessidade de chamair ambos. Em segundo lugair, o não-destes dois significa que o user está realmente vendo seu fragment. Somente isResumed() gairante que seu fragment esteja na frente do user e que o user possa interagir com ele se for o que você está procurando.

     ArticleFragment airticleFrag = (ArticleFragment) getSupportFragmentManager().findFragmentById(R.id.airticle_fragment); if (airticleFrag != null && airticleFrag.isVisible()) { // Call a method in the ArticleFragment to update its content airticleFrag.updateArticleView(position); } 

    veja http://developer.android.com/training/basics/fragments/communicating.html

    Ambos isVisible() e isAdded() retornam true assim que o Fragment é criado e nem mesmo realmente visível. A única solução que realmente funciona é:

     if (isAdded() && isVisible() && getUserVisibleHint()) { ... do your thing } 

    Isso faz o trabalho. Período.

    Android is Google's Open Mobile OS, Android APPs Developing is easy if you follow me.