Fragmento Android nenhuma visualização encontrada para o ID?

287

Eu tenho um fragmento que estou tentando adicionar em uma exibição.

FragmentManager fragMgr=getSupportFragmentManager();
feed_parser_activity content = (feed_parser_activity)fragMgr
                                    .findFragmentById(R.id.feedContentContainer);
FragmentTransaction xaction=fragMgr.beginTransaction();

if (content == null || content.isRemoving()) {
    content=new feed_parser_activity(item.getLink().toString());
    xaction
        .add(R.id.feedContentContainer, content)
        .setTransition(FragmentTransaction.TRANSIT_FRAGMENT_OPEN)
        .addToBackStack(null)
        .commit();
    Log.e("Abstract", "DONE");
}

Quando esse código é executado, recebo o seguinte erro na depuração ..

java.lang.IllegalArgumentException: No view found for id 0x7f080011 
   for fragment feed_parser_activity{41882f50 #2 id=0x7f080011}

feed_parser_activityé um fragmento definido como layout de fragmento em xml.
Estou usando um FragmentActivity para hospedar o Layout do Fragmento segurando o feed_parser_layout.
Estou codificando isso corretamente acima?

coder_For_Life22
fonte
3
Você pode incluir o XML?
jsmith
1
É possível obter o mesmo erro ao fazer uma transação de fragmento antes de chamar setContentView em Activity
Pavel

Respostas:

374

Eu estava tendo esse problema também, até que eu percebi que eu tinha especificado o layout errado setContentView()do onCreate()método da FragmentActivity.

O ID passado FragmentTransaction.add(), no seu caso R.id.feedContentContainer, deve ser filho do layout especificado em setContentView().

Você não nos mostrou seu onCreate()método, então talvez esse seja o mesmo problema.

howettl
fonte
5
O que você quer dizer com filho do layout especificado em setContentView? Como fazê-lo criança?
9133 NinjaCoder
11
Uma visualização é filha de outra visualização, se for declarada dentro da visualização pai no XML. ie um TextViewdentro de um RelativeLayouté filho do RelativeLayout.
howettl
@howettl: Eu sei que é um post antigo. Mas não consigo resolver esse problema com sua resposta. Aqui está a pergunta SO: stackoverflow.com/questions/25844394/… - Você pode me ajudar com isso, por favor? Obrigado!
TheDevMan
@howettl, você pode me ajudar com um problema semelhante. stackoverflow.com/questions/26966623/…
Vamsi Challa
3
Aconteceu comigo. A desvantagem de CTRL + C CTRL + V.
0xx
295

Este erro também ocorre ao aninhar fragmentos e adicioná-los com getSupportFragmentManager () em vez de getChildFragmentManager ().

Malachiasz
fonte
10
O meu era o contrário. Estava tentando adicionar ao contêiner de fragmento principal chamando getChildFragmentManager (). Apontar isso resolveu para mim. Obrigado +1
speedynomads
@Malachiasz: Você poderia dar uma olhada nesta pergunta sobre o ViewPager? Obrigado stackoverflow.com/questions/27937250/…
Hoa Vu
Esse foi exatamente o meu problema, obrigado. Estranho, porém, isso ocorreu apenas na orientação paisagem ao chamar .show (). Usá-lo para substituir o fragmento principal funcionou bem.
cohenadair
1
Esse foi exatamente o meu problema, muito obrigado! Isso estava acontecendo apenas em alguns dispositivos lentos, por isso era difícil entender o que estava acontecendo exatamente.
YawaraNes
1
Depois de chegar a essa pergunta várias vezes, senti que ninguém mais tinha o meu problema, apenas tive que rolar um pouco. Seria bom que eles pudessem obter o código de erro mais específico para dizer que esse poderia ser o caso.
KodyVanRy
67

A solução foi usar getChildFragmentManager()

ao invés de getFragmentManager()

ao chamar de um fragmento. Se você estiver chamando o método de uma atividade, use getFragmentManager().

Isso resolverá o problema.

Sterling Diaz
fonte
4
@ surfer190 use em seu getSupportFragmentManager()lugar.
Amir Hossein Ghasemi
Alterado para getChildFragmentManager () e isso funciona !!
Shyam
No meu caso, eu estava usando a navegação de fragmentos usando o viewpager no fragmento da folha inferior. Sua solução funcionou brilhantemente !! Toneladas de Thanx bro.
Debasish Ghosh
1
teve o mesmo problema e isso resolveu para mim! getChildFragmentManager () em vez de getActivity (). getFragmentManager () que faz sentido uma vez que pensei nisso :) TY!
196 Simon Simon
Estou chamando o método de uma atividade, mas getFragmentManager()está obsoleto agora!
Alireza Noorali
29

Eu tive esse problema (ao criar minha interface do usuário no código) e foi causado pelo fato de os meus ViewPager(que mostravam Fragments) não terem um conjunto de IDs, então simplesmente usei pager.setID(id)e funcionou.

Esta página me ajudou a descobrir isso.

kaka
fonte
1
Eu tive o mesmo problema quando usei o viewPager. O mesmo erro foi corrigido usando o viewPager.setCurrentItem (n) antes de executar a transação. Talvez seja útil para alguém.
21414 Kirk Hammett
No meu caso, estava em uma direção semelhante, mas o problema era que eu usei um valor negativo em .setID. Usar um número inteiro positivo resolveu o problema.
Ignacio Hagopian
29

Outro cenário que conheci. Se você usar fragmentos aninhados, diga um ViewPager em um fragmento com suas páginas também fragmentos.

Quando você faz uma transação Fragment no fragmento interno (página do ViewPager), precisará de

FragmentManager fragmentManager = getActivity().getFragmentManager();
FragmentTransaction fragmentTransaction = fragmentManager.beginTransaction();

getActivity () é a chave aqui. ...

zdd
fonte
sim ... para mim todas as outras implementações foram boas, além disso. Eu tentei acessar diretamente o código assim: FragmentTransaction transaction = getSupportFragmentManager (). BeginTransaction (); Então eu peguei o fragmentmanager usando getActivity () separadamente como você mencionou. Funciona muito bem,
anand krish
18

No meu caso, eu estava tentando mostrar um DialogFragment contendo um pager e essa exceção foi lançada quando o FragmentPagerAdapter tentou adicionar os fragmentos ao pager. Com base na resposta howettl, acho que foi porque o pai do Pager não era a exibição definida em setContentView () na minha FragmentActivity.

A única alteração que fiz para resolver o problema foi criar o FragmentPagerAdapter transmitindo um FragmentMager obtido chamando getChildFragmentManager (), não o obtido chamando getFragmentManager () como normalmente faço.

    public class PagerDialog extends DialogFragment{

    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {

        View rootView = inflater.inflate(R.layout.pager_dialog, container, false);

        MyPagerAdapter pagerAdapter = new MyPagerAdapter(getChildFragmentManager());
        ViewPager pager = (ViewPager) rootView.findViewById(R.id.pager);
        pager.setAdapter(pagerAdapter);

        return rootView;
    }
}
garibay
fonte
getChildFragmentManager () não é acessível a partir DialogFragment
Abdalrahman Shatou
14

Essa exceção também pode ocorrer se o ID do layout para o qual você está passando FragmentTransaction.replace(int ID, fragment)existir em outros layouts que estão sendo inflados. Verifique se o ID do layout é único e deve funcionar.

ealihodzic
fonte
O compilador não informa se o ID está ausente no layout atual , se não for exclusivo, portanto, o problema real não é a exclusividade do ID, mas a omissão do ID no layout atual.
Samuel
13

Uma resposta que li em outro tópico semelhante a este que funcionou para mim quando tive esse problema envolveu o layout xml.

Seu logcat diz "Nenhuma visualização encontrada para o ID 0x7f080011".

Abra o gen->package->R.java->ide, em seguida, procure pelo ID 0x7f080011.

Quando tive esse problema, esse ID pertencia a um FrameLayoutno meu activity_main.xmlarquivo.

O FrameLayout não tinha um ID (não havia declaração android:id = "blablabla").

Verifique se todos os seus componentes em todos os seus layouts possuem IDs, principalmente o componente citado no logcat.

scottysseus
fonte
1
Agradável. No Android Studio com LinuxOS, está aqui: / home / bob / AndroidStudioWorkspace / HelloWorld / app / build / gerado / fonte / r / release / android / support / v7 / appcompat.
portsample 5/03/2015
11

Eu recebi esse erro quando atualizei de com.android.support:support-v4:21.0.0para com.android.support:support-v4:22.1.1.

Eu tive que mudar meu layout com isso:

<?xml version="1.0" encoding="utf-8"?>
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/container_frame_layout"
    android:layout_width="match_parent"
    android:layout_height="match_parent">
</FrameLayout> 

Para isso:

<?xml version="1.0" encoding="utf-8"?>
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent">

    <FrameLayout
        android:id="@+id/container_frame_layout"
        android:layout_width="match_parent"
        android:layout_height="match_parent">
    </FrameLayout>

</FrameLayout> 

Portanto, o layout DEVE ter uma visão infantil. Estou assumindo que eles aplicaram isso na nova biblioteca.

ono
fonte
9

Com fragmentos aninhados

Para mim, usando em getChildFragmentManager()vez de getActivity().getSupportFragmentManager()falha resolvida

java.lang.IllegalArgumentException: nenhuma visualização encontrada para o ID

UdayaLakmal
fonte
Mas, por dentro, o adaptador não pode ser imprimido, getchildFragmentManger why
Sunil Chaudhary
8

Sei que isso já foi respondido em um cenário, mas meu problema era um pouco diferente e pensei em compartilhar caso mais alguém esteja no meu lugar.

Eu estava fazendo uma transação no interior onCreate(), mas, neste momento, a árvore da visualização não foi inflada e, portanto, você recebe o mesmo erro. Colocar o código da transação onResume()fez tudo correr bem.

Portanto, verifique se o código da transação é executado depois que a árvore de exibição foi inflada!

usuario
fonte
3
Hmm ... no meu caso isso não fez diferença se esse código estava em onCreate ou onResume
IgorGanapolsky
@IgorGanapolsky também no meu caso, resolveu isso com retorno de chamada do fragmento onAttach. Veja minha resposta
Alexander Malakhov
Este foi exatamente o meu problema. Uma chamada para outra classe para atualizar um estado de exibição estava executando uma transação de fragmento em um layout que ainda não havia sido inflado. Chamar onResume () corrigiu o problema.
AWT
8

Eu estava enfrentando um erro desagradável ao usar o Viewpager no Recycler View. Abaixo erro que eu enfrentei em uma situação especial. Iniciei um fragmento que tinha um RecyclerView com Viewpager (usando FragmentStatePagerAdapter). Funcionou bem até que eu mudei para um fragmento diferente ao clicar em uma célula no RecyclerView e naveguei de volta usando o botão Voltar do hardware do telefone e o aplicativo travou.

E o engraçado é que eu tinha dois Viewpagers no mesmo RecyclerView e ambos estavam a cerca de 5 células de distância (outros não estavam visíveis na tela, estavam em baixo). Então, inicialmente eu apenas apliquei a solução no primeiro Viewpager e deixei a outra como está (Viewpager usando fragmentos).

A navegação de volta funcionou bem, quando o pager da primeira visualização estava visível. Agora, quando eu rolei para o segundo e depois troquei o fragmento e voltei, ele caiu (a mesma coisa aconteceu com o primeiro). Então eu tive que mudar os dois Viewpagers.

De qualquer forma, leia abaixo para encontrar a solução de trabalho. Erro de falha abaixo:

java.lang.IllegalArgumentException: No view found for id 0x7f0c0098 (com.kk:id/pagerDetailAndTips) for fragment ProductDetailsAndTipsFragment{189bcbce #0 id=0x7f0c0098}

Passou horas depurando-o. Leia esta postagem completa do Thread até a parte inferior, aplicando todas as soluções, incluindo a certeza de que estou passando childFragmentManager.

Nada funcionou.

Finalmente, em vez de usar o FragmentStatePagerAdapter, estendi o PagerAdapter e o usei no Viewpager sem Usar fragmentos. Eu acredito que alguns onde há um erro com fragmentos aninhados. Enfim, temos opções. Ler ...

O link abaixo foi muito útil:

Viewpager sem fragmentos

O link pode morrer, por isso estou postando minha solução implementada aqui abaixo:

public class ScreenSlidePagerAdapter extends PagerAdapter {
private static final String TAG = "ScreenSlidePager";
ProductDetails productDetails;
ImageView imgProductImage;
ArrayList<Imagelist> imagelists;
Context mContext;

// Constructor
public ScreenSlidePagerAdapter(Context mContext,ProductDetails productDetails) {
    //super(fm);
    this.mContext = mContext;
    this.productDetails = productDetails;
}

// Here is where you inflate your View and instantiate each View and set their values
@Override
public Object instantiateItem(ViewGroup container, int position) {
    LayoutInflater inflater = LayoutInflater.from(mContext);
    ViewGroup layout = (ViewGroup) inflater.inflate(R.layout.product_image_slide_cell,container,false);

    imgProductImage = (ImageView) layout.findViewById(R.id.imgSlidingProductImage);
    String url = null;
    if (imagelists != null) {
        url = imagelists.get(position).getImage();
    }

    // This is UniversalImageLoader Image downloader method to download and set Image onto Imageview
    ImageLoader.getInstance().displayImage(url, imgProductImage, Kk.options);

    // Finally add view to Viewgroup. Same as where we return our fragment in FragmentStatePagerAdapter
    container.addView(layout);
    return layout;
}

// Write as it is. I don't know much about it
@Override
public void destroyItem(ViewGroup container, int position, Object object) {
    container.removeView((View) object);
    /*super.destroyItem(container, position, object);*/
}

// Get the count
@Override
public int getCount() {
    int size = 0;

    if (productDetails != null) {
        imagelists =  productDetails.getImagelist();
        if (imagelists != null) {
            size = imagelists.size();
        }
    }
    Log.d(TAG,"Adapter Size = "+size);
    return size;
}

// Write as it is. I don't know much about it
@Override
public boolean isViewFromObject(View view, Object object) {

    return view == object;
}

}

ESPERANÇA isso foi útil !!

Nilesh
fonte
Sim, essa solução funcionou, mas e se eu precisar de construção difícil com ciclo de vida e variáveis ​​próprios, mas não apenas visualizações? Ele será usado com videoViews e imageViews com botões play e mudo. Nada de útil para o meu caso?
Nikita Axyonov
Eu acredito que esta é a razão: stackoverflow.com/a/27966053/1377819
Hoang Nguyen Huu
7

Eu tive o mesmo problema, mas estava ocorrendo um problema de mudança de orientação. Nenhuma das outras soluções funcionou. Por isso, esqueci de remover setRetainInstance(true);meus fragmentos ao fazer um layout de dois ou um painel com base no tamanho da tela.

VM4
fonte
torne false seu setRetainInstance (true) se você estiver em fragmentos aninhados, isso corrigirá o erro.
Ralphgabb
5

Meu erro foi no FragamentTransaction.

Eu estava fazendo isso em t.replace(R.layout.mylayout);vez det.replace(R.id.mylayout);

A diferença é que um é o layout e o outro é uma referência ao layout(id)

mut tony
fonte
4

Apenas no caso de alguém cometer o mesmo erro estúpido que eu; verifique se você não está substituindo o conteúdo da atividade em algum lugar (por exemplo, procure chamadas adicionais para setContentView)

No meu caso, devido à cópia e colagem descuidadas, usei DataBindingUtil.setContentView no meu fragmento, em vez de DataBindingUtil.inflate, que atrapalhava o estado da atividade.

Squimon
fonte
3

Eu tive esse mesmo problema, deixe-me postar meu código para que todos possam vê-lo e não fazer a mesma coisa que eu fiz.

@Override
protected void onResume()
{
    super.onResume();

    fragManager = getSupportFragmentManager();

    Fragment answerPad=getDefaultAnswerPad();
    setAnswerPad(answerPad);
    setContentView(R.layout.abstract_test_view);
}
protected void setAnswerPad(AbstractAnswerFragment pad)
{
    fragManager.beginTransaction()
        .add(R.id.AnswerArea, pad, "AnswerArea")
        .commit();
    fragManager.executePendingTransactions();
}

Observe que eu estava configurando fragmentos antes de eu setContentView. Opa.

PearsonArtPhoto
fonte
1
Obrigado! Eu estava fazendo a mesma coisa, então coloquei meu setContentViewdentro do meuonBuildHeaders
Randy
3

Esta página parece ser um bom local central para postar sugestões sobre o Fragment IllegalArgumentException. Aqui está mais uma coisa que você pode tentar. Isto é o que finalmente funcionou para mim:

Eu tinha esquecido que tinha um arquivo de layout separado para orientação da paisagem. Depois de adicionar meu contêiner FrameLayout, também, o fragmento funcionou.


Em uma nota separada, se você já tentou todo o resto sugerido nesta página (e toda a Internet também) e tem arrancado seus cabelos há horas, considere apenas despejar esses fragmentos irritantes e voltar para um bom e antigo layout padrão. (Na verdade, era isso que eu estava fazendo quando finalmente descobri o meu problema.) Você ainda pode usar o conceito de contêiner. No entanto, em vez de preenchê-lo com um fragmento, você pode usar a includetag xml para preenchê-lo com o mesmo layout que você usaria em seu fragmento. Você pode fazer algo assim no seu layout principal:

<FrameLayout
    android:id="@+id/container"
    android:layout_width="match_parent"
    android:layout_height="match_parent" >

    <include layout="@layout/former_fragment_layout" />

</FrameLayout>

onde former_fragment_layouté o nome do arquivo de layout xml que você estava tentando usar no seu fragmento. Consulte Reutilizando layouts com include para obter mais informações.

Suragch
fonte
essa é uma boa sugestão, mas não funciona se for necessário alternar fragmentos dinamicamente. Além disso, reduz a reutilização, porque você pode encapsular o comportamento (código) no fragmento.
Alexander Malakhov
Eu definitivamente concordo. Fragmentos são muito melhores.
Suragch 5/03/2015
2

No meu caso, eu tinha um SupportMapFragment em um item de exibição de reciclador (eu estava usando a sobrecarga inferior "liteMode", que faz o mapa parecer não interativo, quase como uma imagem estática). Eu estava usando o FragmentManager correto, e tudo parecia funcionar bem ... com uma pequena lista. Depois que a lista de itens excedeu um pouco a altura da tela, comecei a receber esse problema ao rolar.

Acontece que foi porque eu estava injetando um SupportMapFragment dinâmico dentro de uma visualização, que estava dentro de outro fragmento, para solucionar alguns problemas que eu estava tendo ao tentar declará-lo estaticamente no meu XML. Por esse motivo, o layout do espaço reservado do fragmento só pode ser substituído pelo fragmento real depois que a visualização for anexada à janela, ou seja, visível na tela. Então, eu coloquei meu código para inicializar o SupportMapFragment, substituir o fragmento e chamar getMapAsync () no evento onAttachedToWindow.

O que eu esqueci de fazer foi garantir que meu código não fosse executado duas vezes. Ou seja, no evento onAttachedToWindow, verifique se meu dinâmico SupportMapFragment ainda estava nulo antes de tentar criar uma nova instância e fazer uma substituição de fragmento. Quando o item sai da parte superior do RecyclerView, ele é desanexado da janela e, em seguida, reconectado quando você volta para ele, para que esse evento seja disparado várias vezes.

Depois de adicionar a verificação nula, isso aconteceu apenas uma vez por item do RecyclerView e o problema desapareceu! TL; DR!

Breeno
fonte
2

Isso acontece quando você está chamando de um fragmento dentro de outro.

usar :

getActivity().getSupportFragmentManager().beginTransaction();
Arvin Sanaei
fonte
1

Encontrei esse problema ao tentar substituir o modo de exibição pelo meu fragmento em onCreateView(). Como isso:

public class MyProjectListFrag extends Fragment {


    private MyProjectListFragment myProjectListFragment;

    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
            Bundle savedInstanceState) {

        FragmentManager mFragmentManager = getFragmentManager();
        myProjectListFragment = new MyProjectListFragment();
        mFragmentManager
                .beginTransaction()
                .replace(R.id.container_for_my_pro_list,
                        myProjectListFragment, "myProjectListFragment")
                .commit();
    }

Me disse

11-25 14:06:04.848: E/AndroidRuntime(26040): java.lang.IllegalArgumentException: No view found for id 0x7f05003f (com.example.myays:id/container_for_my_pro_list) for fragment MyProjectListFragment{41692f40 #2 id=0x7f05003f myProjectListFragment}

Corrigi esse problema colocando a substituição onActivityCreated(). Como isso:

public class MyProjectListFrag extends Fragment {

    private final static String TAG = "lch";

    private MyProjectListFragment myProjectListFragment;

    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
            Bundle savedInstanceState) {

        return inflater
                .inflate(R.layout.frag_my_project_list, container, false);
    }

    @Override
    public void onActivityCreated(@Nullable Bundle savedInstanceState) {
        // TODO Auto-generated method stub
        super.onActivityCreated(savedInstanceState);

        FragmentManager mFragmentManager = getFragmentManager();
        myProjectListFragment = new MyProjectListFragment();
        mFragmentManager
                .beginTransaction()
                .replace(R.id.container_for_my_pro_list,
                        myProjectListFragment, "myProjectListFragment")
                .commit();

    }
  1. Você deve retornar uma visualização onCreateView()para poder substituí-la mais tarde
  2. Você pode colocar qualquer operação nessa direção na seguinte função no ciclo de elevação de fragmentos, como onActivityCreated()

Espero que isto ajude!

Stephen Lin
fonte
1

Corrigi esse bug, uso a commitNow()substituição commit().

mFragment.getChildFragmentManager()
  .beginTransaction()
  .replace(R.id.main_fragment_container,fragment)
  .commitNowAllowingStateLoss();

O commitNowé um método de sincronização, o commit()método é um método assíncrono.

user1232595
fonte
1

No meu caso, essa exceção foi lançada quando eu usei IDs diferentes para o mesmo elemento de layout (espaço reservado para fragmento), tendo vários deles para diferentes variantes de compilação. Por alguma razão, ele funciona perfeitamente bem quando você está substituindo um fragmento pela primeira vez, mas se você tentar fazer isso novamente, receberá esta exceção. Portanto, verifique se você está usando o mesmo ID se tiver vários layouts para diferentes variantes de compilação.

TK
fonte
0

Se você está tentando substituir um fragmento dentro de um fragmento pelo fragmentManagermas não está inflando o fragmento pai que pode causar um problema.

Em BaseFragment.java OnCreateView :

if (savedInstanceState == null) {
            getFragmentManager().beginTransaction()
                    .replace(R.id.container, new DifferentFragment())
                    .commit();
        }

return super.onCreateView(inflater, container, savedInstanceState);

Substitua super.onCreateView(inflater, container, savedInstanceState); por inflar o layout correto para o fragmento:

        return inflater.inflate(R.layout.base_fragment, container, false);
Stephen
fonte
0

Eu tive o mesmo problema quando estava fazendo transações de fragmentos durante a criação da atividade.

O principal problema é o que Nick já apontou - a árvore de visualização ainda não foi inflada. Mas sua solução não funcionou - a mesma exceção em onResume, onPostCreate etc.

A solução é adicionar retorno de chamada ao fragmento do contêiner para sinalizar quando estiver pronto:

public class MyContainerFragment extends Fragment {
    public static interface Callbacks {
        void onMyContainerAttached();
    }

    @Override
    public void onAttach(Activity activity) {
        super.onAttach(activity);
        Log.d(TAG, "--- onAttach");
        ((Callbacks) activity).onMyContainerAttached();
    }

    //... rest of code
}

E então em atividade:

public class MainActivity extends Activity
        implements MyContainerFragment.Callbacks
{
    @Override
    public void onMyContainerAttached() {
        getFragmentManager()
                .beginTransaction()
                .replace(R.id.containerFrame, new MyFragment())
                .commit();
    }

    //...
}
Alexander Malakhov
fonte
0

No meu caso, eu estava usando um arquivo de classe de fragmento para declarar uma classe de adaptador listview. Acabei de usar um arquivo diferente para a classe do adaptador público e o erro se foi.

Gauss
fonte
0

Esse problema também ocorre quando você não coloca o <include layout="@layout/your_fragment_layout"/>seuapp_bar_main.xml

Bbake Waikhom
fonte
0

Isso acontece também quando você tem duas visualizações em dois fragmentos com os mesmos IDs

Hossam Hassan
fonte
Isto está incorreto. Nesse caso, o código não seria compilado.
Taslim Oseni 26/09/19
0

Eu tive o mesmo problema que foi causado porque tentei adicionar fragmentos antes de adicionar o layout do contêiner à atividade.

Rohit
fonte
0

Às vezes, é porque você está usando um BottomNavigationView. Se você abrir um Intent a partir da navegação e nessa atividade você abrir um fragmento, digamos

transaction.replace(R.id.container,new YourFragment());

a atividade não poderá encontrar o método de navegação que você está usando.

SOLUÇÃO: altere a atividade para fragmentar e manipular a navegação com addOnBackStack no seu aplicativo. Se você implementou o Jetpack Navigation, use fragmentos no seu projeto.

Felipe Franco
fonte
0

No meu caso. Eu tenho um Activitycom serveral Fragments algum tempo eu preciso recriar Fragments quando

  • linguagem é mudança
  • layout de fragmento alguns precisam alguns não precisam ou mudança de conteúdo precisa recriar
  • outras mudanças
  • Limpo todos os Fragmente defino tudo como nullem atividade, mas o Fragment já se cria, enquanto ele hospeda activty é bean set null, portanto, antes de chamar o Fragment view, verifique-o nulo

    por exemplo

    Activity{
        fragment
        recreate{
           fragment = null then new instance
        }
    
    }
    
    Fragment{
        if((activity).fragment != null) {
           findViewById()
        }
    
    }
    shuabing
    fonte