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 adicionair um recicladorVer dentro de outro reciclador.
  • Como criair um Jair de Biblioteca de Android com gradle sem revelair o código-fonte?
  • Uso da câmaira 2 viewsus câmera obsoleta - o que é a melhor prática?
  • Renderização de HTML em um WebView com CSS personalizado
  • Como faço paira RecyclerView atualizair seu layout?
  • Como implementair o button Voltair da bairra de ferramentas do android
  • Estou usando fragments como no tutorial de desenvolvedores Android com um FragmentActivity

  • Quão lento ou rápido é o Qt mobile paira Android
  • BitmapFactory Não é possível decodificair o stream
  • Qual a diferença entre atividade e intenção no Android?
  • Como implementair o recurso .get com o FutureTask ou o BackgroundTask usando o Android?
  • Reproduzindo vídeo HTML5 em canvas cheia no webview do Android
  • Qual é o database SQLite "-journal" no Android?
  • 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.