Tecnologia do Blogger.
RSS

Re: [androidbrasil-dev] Erro ao adicionar @id para Fragment

Felipe,


Para setar o id no fragment use @+id ao invés de @id.
No site do developer.android tem uma definição que talvez te ajude:

  • Note: Each fragment requires a unique identifier that the system can use to restore the fragment if the activity is restarted (and which you can use to capture the fragment to perform transactions, such as remove it). There are three ways to provide an ID for a fragment:

    • Supply the android:id attribute with a unique ID.
    • Supply the android:tag attribute with a unique string.
    • If you provide neither of the previous two, the system uses the ID of the container view.

Abraços,
--




2012/11/28 Felipe Aron <felipearon@gmail.com>
Fiz alguns testes aqui, criando um novo exemplo, e creio que encontrei o problema (mas não a solução). Vamos a explicação:

Eu estou usando o Sherlock ActionBar

Minha tela inicial (em anexo) tem duas Tabs contendo o Fragment1 e Fragment2. Esse dois Fragments são incluídos dinamicamente no container da Activity.

Dentro do meu Fragment2, eu tenho a chamada do Fragment3 - esse incluído através de <fragment /> no XML do Fragment2:

<fragment
  class="net.exemplo.exemplofragment.Fragment3"
android:layout_width="match_parent"
android:layout_height="wrap_content" />

Até aqui o projeto é executado quase "sem erros". - Apesar dos fragments executarem corretamente, ao virar a tela ocorre um exception. Porém esse é apenas um detalhe não sendo o foco principal.

[!] A partir dai, preciso então acessar o Fragment3, e para isso preciso indicar a TAG para ele. Colocando a tag e executando o projeto, já ocorre o ERRO de duplicidade de id/tag.

Tentei então adicionar dinamicamente o Fragment3 dentro do meu Fragment2 a partir de um container. Porém não obtive sucesso pois não consegui adicionar via código.

[!] Pesquisando na Internet (Stackoverflow), encontrei várias pessoas dizendo que um Fragment não pode conter outro Fragment. Creio então que esse seja o problema...

Perguntas:

a) É correto afirmar que um Fragment não pode conter outro Fragment?

b) Como faço para inserir dinamicamente um Fragment, através do getSupportManager() dentro do outro Fragment?


Em 27 de novembro de 2012 14:44, Felipe Aron <felipearon@gmail.com> escreveu:

A tag realmente não gera classe R, mas o erro de duplicação persiste:

"Duplicate id 0xffffffff, tag fragData, or parent id...." 

Verifiquei a classe R em busca desse "0xffffffff" porém não existe.

Confesso que estou andando em círculos com esse pequeno/grande problema...rs.

Em 27 de novembro de 2012 14:36, Ricardo Lecheta <rlecheta@gmail.com> escreveu:

Felipe

Com a tag não vai duplicar, pois não gera a classe R.

Veja na classe R quem é este 0x7f040047, que você vai descobrir onde duplicou


2012/11/27 Felipe Aron <felipearon@gmail.com>
Ricardo tentei com tag também, mas deu o mesmo erro de duplicidade: 

<fragment
            class="br.com.fsoft.tablet.interno.fragments.FragmentData"            
            android:tag="fragData"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content" />

Pesquisando na Internet, inclusive um vídeo teu falando sobre Fragment diz para validar o Bundle:
  if(savedInstanceState == null)

Porém não entendi ao certo como usa-lo.


Em 27 de novembro de 2012 14:18, Ricardo Lecheta <rlecheta@gmail.com> escreveu:
Felipe,

Use uma tag no lugar de id, depois faça findFragmentByTag..

2012/11/27 Felipe Aron <felipearon@gmail.com>
Galera, no meu layout (xml) adicionei um <fragment/> sem @id, e está funcionando normalmente:

    <!-- DATA PARA ACERTO PREVISTO -->
    <LinearLayout
        android:id="@+id/lnlAcertoPrevisto"
        android:layout_below="@id/lnlRepresentante"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:orientation="vertical" >
        
        <TextView
android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:text="@string/acertoPrevisto"
            android:textStyle="bold" />
        
        <fragment
            class="br.com.fsoft.tablet.interno.fragments.FragmentData"            
            android:layout_width="wrap_content"
            android:layout_height="wrap_content" />       
        
    </LinearLayout>

Porém agora, vou precisar dar um @id para ese <fragment/> pois vou precisar acessá-lo no meu FragmentActivity.

Porém, se coloco @id no <fragment/> ao executar o app, dá erro:

"Caused by: java.lang.IllegalArgumentException: Binary XML file line 
Duplicate id 0x7f040047, tag null, or parent id 0x0 with another fragment for br.com.fsoft.tablet.interno.fragments.FragmentData"

Pelo que entendi o erro diz que esse @id está duplicado, mas não sei o porque. Alguém já passou por isso? Como resolver?

--
Analista-Programador

--
 
 



--
Ricardo Lecheta

--
 
 



--
Analista-Programador

--
 
 



--
Ricardo Lecheta

--
 
 



--
Analista-Programador




--
Analista-Programador

--
 
 

--
 
 

  • Digg
  • Del.icio.us
  • StumbleUpon
  • Reddit
  • RSS

0 comentários:

Postar um comentário