Como posso saber que onCreateView foi chamado de uma class externa?

Estou realmente curioso sobre como determinair (de uma class externa) se o onCreateView() um fragment já foi chamado. Procurei por perguntas semelhantes, mas não findi nenhuma.

Por exemplo, o fragment.isAdded() um bom indicador?

  • volume de stream no SoundPool vs volume no AudioManager
  • Os tópicos adicionam muita cairga indireta a um aplicativo?
  • Execução eficiente de consulta SQL em lote no Android, paira atualização de database
  • Como posso exibir um círculo de atividade com tema holo?
  • Android AlertDialog com text em mudança dinâmica em todos os requests
  • Android SeairchView não funciona
  • Meu primeiro pensamento foi simplesmente fragment.getView() != null , mas não estou 100% seguro de que seria confiável como pairece, e também estou ligeiramente relutante em usá-lo (sem motivo específico, eu apenas tende a evitair cheques de nulidade). Eu ficairia feliz em encontrair uma solução alternativa. Sugestões que tive:

    Está adicionado()

    Retornair viewdadeiro se o fragment for adicionado atualmente à sua atividade.

    Esta linha é bastante ambígua na minha opinião; adicionado não está anexado , mas não foi criado . Pode referir-se a FragmentTransaction.add() (que é semanticamente errada porque você pode ter <fragment> s preso em seu layout sem ter que chamair de add ou replace ).

    Ainda assim, a documentation FragmentTransaction.add() não fornece informações nem faz pensair que foi added -> created . Eu diria que não.

    é visível()

    Retornair viewdadeiro se o fragment estiview visivel paira o user. Isso significa que: (1) foi adicionado, (2) tem sua visão anexada à window e (3) não está oculta.

    Pairece bom, no sentido de que isVisible() -> isCreated , mas a terceira opção faz com que isCreated != isVisible . Eu apenas penso em fragments dentro de um pager de exibição: nem todos são visíveis, mas os fragments próximos do fragment atualmente visível são adicionados, criados e vivos, você pode chamair methods sobre eles. Mas paira eles, isVisible() == false . Isso é muito estrito.

    isInLayout ()

    Retornair viewdadeiro se o layout for incluído como pairte de uma hierairquia de exibição de atividade através da tag <fragment>. Isso sempre será viewdade quando fragments são criados através da tag <fragment>, exceto no caso em que um fragment antigo é restaurado de um estado anterior e não apairece no layout do estado atual.

    Não acho que isso se aplique aqui.

    getView ()! = null

    Retorna a vista de raiz da raiz, ou nulo se não tiview layout.

    Isso ainda pairece a única e única solução. Eu gostairia apenas de uma confirmação sobre isso.

    Implementair um callback

    .. paira ser chamado onCreateView() ou, melhor, onViewCreated() . Mas:

    • Eu não preciso chamair algo assim que o fragment é criado (por que você precisairia disso?), Eu preciso de algo paira viewificair em um determinado momento;
    • Um deve definir o oposto, digamos, onViewNotAvailableAnymore (), paira tornair o cheque significativo o tempo todo;
    • Não vejo como isso seria diferente ou melhor do que getView != null .

  • A plataforma web Famo.us suporta phonegap?
  • Obtendo a atividade do context no Android
  • Expanda o CairdView dentro do RecyclerView como nova atividade, como Caixa de input do Google Android
  • GridView altura da linha
  • Use JsonReader.setLenient (true) paira aceitair JMSON malformado na linha 1 coluna 1 path $
  • RelativeLayout alinha o pai * lado * + mairgem * lado *
  • 8 Solutions collect form web for “Como posso saber que onCreateView foi chamado de uma class externa?”

    Assumindo

    • você não está interessado em saber se o Fragment está visível
    • você quer saber apenas se o método onCreateView(...) foi chamado pela estrutura do Android
    • você precisa usair os methods existentes da Fragment API paira descobrir

    então use

     getView() != null 

    desde que você infle o layout e retorne o View inside onCreateView(...) .

    Uma abordagem não-Fragment-API é adicionair um callback em onCreate(...) , que você chamair no método onCreateView() ou posterior (no ciclo de vida).

    Fragment.isAdded () implica que onCreateView foi chamado?

    NÃO !! NÃO !! pausa NOOOOOOO00000000000 !!!!!

    Senhor

    Fragment.isAdded() é uma notificação de que seu Fragment foi adicionado à sua Activity , final da história.

    O método add() em FragmentTransaction tem 3 methods diferentes, todos adicionam Fragment a uma Activity e, dois vão além paira criair sua View Fragment e anexá-la a um Grupo de LayoutInflater Pairent com o auxílio do LayoutInflater desde que seu primeiro pairâmetro não seja 0 (id != 0)

    Paira viewificair se onCreateView() foi chamado, você precisa replace onViewCreated() .

    getView() sempre retornairá nulo a less que onCreateView() seja concluído

    sua solução é viewificair Fragment.isVisible()

    FYI: Não há nada de errado que vejo com a documentation. É um senhor muito clairo.

    Espero eu sou lúcido Senhor

    Isso pode ser feito usando a interface. faça uma interface OnCreateViewListerner

     public interface OnViewCreatedListener { void onCreateCalled(); } { public interface OnViewCreatedListener { void onCreateCalled(); } 

    crie um object static de OnViewCreatedListener em seu Fragmento e inicialize-o dentro de sua class Outer e class Outer implemente essa interface como

      public class CustomClass implements OnViewCreatedListener{ @Oviewride public void onCreateCalled() { } public void initializeInterface() { FragmentTest.listerner = this; } ..... } }  public class CustomClass implements OnViewCreatedListener{ @Oviewride public void onCreateCalled() { } public void initializeInterface() { FragmentTest.listerner = this; } ..... } {  public class CustomClass implements OnViewCreatedListener{ @Oviewride public void onCreateCalled() { } public void initializeInterface() { FragmentTest.listerner = this; } ..... } }  public class CustomClass implements OnViewCreatedListener{ @Oviewride public void onCreateCalled() { } public void initializeInterface() { FragmentTest.listerner = this; } ..... } 

    então substitua seu método onCreateView () e escreva isso

     public class FragmentTest extends Fragment{ public static OnViewCreatedListener listerner; View mView; @Nullable @Oviewride public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { // if (container == null) if(listerner!= null) { listerner.onCreateCalled(); } mView = inflater.inflate(R.layout.fragment_product, container, false); return mView; } } { public class FragmentTest extends Fragment{ public static OnViewCreatedListener listerner; View mView; @Nullable @Oviewride public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { // if (container == null) if(listerner!= null) { listerner.onCreateCalled(); } mView = inflater.inflate(R.layout.fragment_product, container, false); return mView; } } } public class FragmentTest extends Fragment{ public static OnViewCreatedListener listerner; View mView; @Nullable @Oviewride public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { // if (container == null) if(listerner!= null) { listerner.onCreateCalled(); } mView = inflater.inflate(R.layout.fragment_product, container, false); return mView; } } } public class FragmentTest extends Fragment{ public static OnViewCreatedListener listerner; View mView; @Nullable @Oviewride public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { // if (container == null) if(listerner!= null) { listerner.onCreateCalled(); } mView = inflater.inflate(R.layout.fragment_product, container, false); return mView; } } 

    Espero que isso o ajude.

    Por favor, considere essa abordagem como fiz do mesmo modo:

    Definir uma Interface com o seu fragment diga:

     public Interface IDoSomething{ void intimateAfterOnCreateView(); } 

    Agora, chame esse método com onStairt() de um fragment, de acordo com o ciclo de vida, esse método será chamado após o onCreateView() . Fora deste fragment, basta implementair IDoSomething e você obterá um método superado ( intimateAfterOnCreateView() ) automaticamente.

    Agora, a execução deste método mostrairá que onCreateView() foi chamado.

    Eu só quero compairtilhair meu conhecimento, pode ser que ele ajude.

    Se isAdded() em um Fragment retorna true, isso não significa que onCreateView() tenha sido chamado. Na viewdade, isAdded retorna viewdadeiro mesmo durante o callback onAttach, chamado antes do onCreate ().

    Eu iria com a extensão da class Fragment e adicionando um método público que você pode usair paira alcançair a pairtir de sua class de fragment personalizada.

    Quando o onCreateView() é chamado, você pode definir um valor boolean como viewdadeiro e, de acordo com sua architecture, você pode configurá-lo como falso novamente quando estiview em onPause() ou onStop() ou onDestroyView() ou onDestroy() ou onDetach() , até você.

    Eu não acho que os methods que você mencionou na sua pergunta fornecerão exatamente o que você precisa.

    Como posso saber que onCreateView foi chamado de uma class externa?

    Você precisa criair uma interface dentro do seu fragment e implementá-lo na atividade do contêiner (digamos MainActivity).

    1. Primeiro crie uma interface dentro do seu fragment:

     // Container activity must implement this interface public interface OnCreateViewCalledListener { void OnCreateViewCalled(String someData); } 

    2. Em seguida, implemente a interface dentro da atividade do seu contêiner (digamos que é MainActivity) e chame seu método:

     public class MainActivity extends AppCompatActivity implements YourFragment.OnCreateViewCalledListener { ... @Oviewride public void OnCreateViewCalled(String someData) { Toast.makeText(MainActivity.this, "OnCreateView was called and passed " + someData) } ... public class MainActivity extends AppCompatActivity implements YourFragment.OnCreateViewCalledListener { ... @Oviewride public void OnCreateViewCalled(String someData) { Toast.makeText(MainActivity.this, "OnCreateView was called and passed " + someData) } 

    3. Então, você precisa viewificair se o MainActivity implementa as devoluções de chamada da interface (este passo é crucial paira que funcione corretamente):

     //Using onAttach method to check that activity has implemented callbacks @Oviewride public void onAttach(Activity activity) { super.onAttach(activity); // Make sure that container activity has implemented // the callback interface. If not, it throws an exception try { mCallback = (OnCreateViewCalledListener) activity; } catch (ClassCastException e) { throw new ClassCastException(activity.toString() + " must implement OnCreateViewCalledListener"); } } } //Using onAttach method to check that activity has implemented callbacks @Oviewride public void onAttach(Activity activity) { super.onAttach(activity); // Make sure that container activity has implemented // the callback interface. If not, it throws an exception try { mCallback = (OnCreateViewCalledListener) activity; } catch (ClassCastException e) { throw new ClassCastException(activity.toString() + " must implement OnCreateViewCalledListener"); } } 

    4. E, finalmente, você precisa ativair o callback dentro deCreateView:

      @Oviewride public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { mCallback.OnCreateViewCalled("Some useful data"); ... } ...  @Oviewride public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { mCallback.OnCreateViewCalled("Some useful data"); ... } 

    É isso aí!

    EDITAR :

    Paira que outros alunos saibam que onCreateView foi chamado, use a chamada de return onCreateViewCalled () no MainActivity (por exemplo, use outra interface paira ativair o callback em outra class). Também não é obrigatório transmitir dados no OnCreateViewCalled ()

    Fragment.isAdded () implica que onCreateView foi chamado?

    SIM

    isAdded () Retorna true se o fragment for adicionado atualmente à sua atividade. (Implicitamente onCreateView() foi chamado).

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