java.lang.IllegalStateException (ANDROID)

78 views
Skip to first unread message

Marcos Vinithius Melo Filho

unread,
May 16, 2014, 8:17:50 AM5/16/14
to ce...@googlegroups.com
Bom dia pessoal!

Recentemente me deparei com um "Exception" novo para mim, o "java.lang.IllegalStateException", cheguei a traduzir o seguinte texto

java.lang.IllegalStateException: The specified child already has a parent. You must call removeView() on the child's parent first.

No meu projeto estou usando um FragmentActivity que chama um Fragment que chama outro Fragment (OBS: Estou usando Gaveta no projeto), no texto pede para usar um "removeView()", pesquisei e só vi que é usado para remover alguma View como "ScrollView" e cia... este erro tem haver com os meus fragments???



Darlan C. de Sousa

unread,
May 16, 2014, 10:24:00 AM5/16/14
to ce...@googlegroups.com

Pode postar o código? Já tive esse problema, no meu caso foi simples de resolver pois por falta de atenção eu estava chamando a view errada dentro do Fragment.

--
Você recebeu essa mensagem porque está inscrito no grupo quot;CEJUG" dos Grupos do Google.
Para cancelar inscrição nesse grupo e parar de receber e-mails dele, envie um e-mail para cejug+un...@googlegroups.com.
Para postar nesse grupo, envie um e-mail para ce...@googlegroups.com.
Acesse esse grupo em http://groups.google.com/group/cejug.
Para mais opções, acesse https://groups.google.com/d/optout.

Marcos Vinithius Melo Filho

unread,
May 16, 2014, 10:48:23 AM5/16/14
to ce...@googlegroups.com
Eu fico até na dúvida o que colocar, vou postar os dois fragments, o código ta grande e desorganizado ainda...

FragmentUniversal
package br.com.coelce.comissionamento.fragment;

//import android.app.Fragment;
//import android.app.FragmentManager;
import java.util.HashMap;
import java.util.List;

import android.content.Intent;
import android.location.Location;
import android.os.Bundle;
import android.support.v4.app.DialogFragment;
import android.app.Fragment;
import android.app.FragmentManager;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.OrientationEventListener;
import android.view.View;
import android.view.ViewGroup;
import android.widget.AdapterView;
import android.widget.AdapterView.OnItemClickListener;
import android.widget.ArrayAdapter;
import android.widget.Button;
import android.widget.LinearLayout;
import android.widget.ListView;
import android.widget.TextView;
import br.com.coelce.comissionamento.R;
import br.com.coelce.comissionamento.adapters.ListTiposDeEnsaiosAdapter;
import br.com.coelce.comissionamento.model.Equipamento;
import br.com.coelce.comissionamento.model.TiposDeEnsaios;
import br.com.coelce.comissionamento.model.TiposDeEquipamento;
import br.com.coelce.comissionamento.persistence.DataManager;
import br.com.coelce.comissionamento.references.EnsaiosB;

public class FragmentUniversal extends Fragment {

    protected static final String FRAGMENT_UNIVERSAL = "FragmentUniversal";
    protected static final String FRAGMENT_CRUD = "Fragments";
    private static final int CAPTURE_IMAGE_ACTIVITY_REQUEST_CODE = 100;
    private Location lastLocation;
    private int i;
    private Intent home;
    private Bundle args, fragmentUniversal;
    private TextView title;
    private HashMap<Integer, Button> buttonList = new HashMap<Integer, Button>();
    private DataManager dateManager;
    private Button bt_salvar, bt_cancelar, bt_home, bt_default;
    private LinearLayout layout;
    private ListView list;
    private Fragment fragment;
    private FragmentManager fragmentManager;
    private Long idEquipamento;
    private Boolean confere = false;
    private long id;

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

        Bundle args = getArguments();
        idEquipamento = args.getLong(FRAGMENT_UNIVERSAL);
        Log.i("OnCREATE", "FRAGMENT_UNIVERSAL...");
        if (savedInstanceState == null) {
            DataManager.getInstance().saveCurrentEquipamento();
        } else {
            if (savedInstanceState.getBoolean("confere")) {
                savedInstanceState.putBoolean("confere", false);
// DataManager.getInstance().getCurrentEquipamento().setCodOperacao(savedInstanceState.getString("codOper"));
// DataManager.getInstance().getCurrentEquipamento().setNumeroSerie(savedInstanceState.getString("NumeroSerie"));
            } else {
                DataManager.getInstance().resetCurrentEquipamento();
                DataManager.getInstance().saveCurrentEquipamento();
            }
        }

        View rootView = inflater.inflate(R.layout.fragment_universal,
                container, false);
        Log.i("onCreate: ", "PASSOU!");
        // Objeto corrente...
        OrientationEventListener orientacao = new OrientationEventListener(
                getActivity()) {

                    @Override
                    public void onOrientationChanged(int orientation) {
                        confere = true;
                    }
                };

        list = (ListView) rootView.findViewById(R.id.listEnsaios);

        castBotoes(rootView);
        listarBotoes();
        try {
            popularListView();
        } catch (Exception e1) {
            // TODO Auto-generated catch block
            e1.printStackTrace();
        }

        bt_home.setOnClickListener(new View.OnClickListener() {

            @Override
            public void onClick(View v) {
                // DataManager.getInstance().resetCurrentEquipamento();

                Intent home = new Intent();
                home.setClass(getActivity(), ActivityPrincipal.class);
                // intent.putExtra("index", index);
                startActivity(home);

                Equipamento equipamento = DataManager.getInstance()
                        .getCurrentEquipamento();
                if (equipamento.getNumeroSerie() == null) {
                    DataManager.getInstance().deleteCurrentEquipamento();
                }
            }
        });

        title = (TextView) rootView.findViewById(R.id.textView_title_universal);

        try {
            gerarBotoes(idEquipamento);
        } catch (Exception e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
        return rootView;
    }

    @Override
    public void onDestroy() {
        Equipamento equipamento = DataManager.getInstance()
                .getCurrentEquipamento();
        if (equipamento.getNumeroSerie() == null) {
            DataManager.getInstance().deleteCurrentEquipamento();
        }
        super.onDestroy();
    }

    @Override
    public void onSaveInstanceState(Bundle outState) {

        Equipamento equipamento = DataManager.getInstance()
                .getCurrentEquipamento();

        outState.putBoolean("serviceStarted", confere);

// outState.putString("NumeroSerie", equipamento.getNumeroSerie().toString());
// outState.putString("codOper", equipamento.getCodOperacao().toString());
        super.onSaveInstanceState(outState);
    }

    private void castBotoes(View v) {

        bt_salvar = (Button) v.findViewById(R.id.button_salvar);
        bt_cancelar = (Button) v.findViewById(R.id.button_cancelar);
        bt_home = (Button) v.findViewById(R.id.button_home);

        listarBotoes();
    }

    private void listarBotoes() {
        // Listar Botões para exibir posteriormente somente o necessário

        buttonList.put(EnsaiosB.SALVAR, bt_salvar);
        buttonList.put(EnsaiosB.CANCELAR, bt_cancelar);
        buttonList.put(EnsaiosB.HOME, bt_home);

        // Deixa invisivel todos os botões
        for (Button n : buttonList.values()) {

            n.setVisibility(View.GONE);

        }
    }

    private void gerarBotoes(final Long idEquipamento) throws Exception {

        // i = getArguments().getInt(FRAGMENT_UNIVERSAL);
        Log.i("gerarBotoes ID equipamento: ", idEquipamento.toString());

        TiposDeEquipamento tiposDeEquipamento = DataManager.getInstance()
                .getTiposDeEquipamentoDao().get(idEquipamento);
        String nome = tiposDeEquipamento.getNome();
        title.setText(nome);

        // Habilita os botões necessários
        buttonList.get(EnsaiosB.SALVAR).setVisibility(View.VISIBLE);
        buttonList.get(EnsaiosB.CANCELAR).setVisibility(View.VISIBLE);
        buttonList.get(EnsaiosB.HOME).setVisibility(View.VISIBLE);
        Log.e("BOT�O", "Passou pelo gerarBotoes");
        
        //List de botões gerados pelo forName()
        list.setOnItemClickListener(new OnItemClickListener() {

            @Override
            public void onItemClick(AdapterView<?> parent, View view,
                    int position, long id) {

                Object t = list.getItemAtPosition(position);
                TiposDeEnsaios ensaio = (TiposDeEnsaios) t;

                try {
                    Class<Fragment> c = (Class<Fragment>) Class
                            .forName(ensaio.getNomeClasse());
                    
                    args = new Bundle();
                    args.putLong(FragmentUniversal.FRAGMENT_CRUD, idEquipamento);
                    Fragment fragment = c.newInstance();
                    fragment.setArguments(args);
                    FragmentManager fm = getFragmentManager();
                    fm.beginTransaction()
                        .replace(R.id.content_frame, fragment).commit();
//                    fragment.show(fm, "DialogFragment");
                    Log.e("list: ", ensaio.getNomeClasse());
                    
                } catch (ClassNotFoundException e) {
                    // TODO Auto-generated catch block
                    e.printStackTrace();
                } catch (java.lang.InstantiationException e) {
                    // TODO Auto-generated catch block
                    e.printStackTrace();
                } catch (IllegalAccessException e) {
                    // TODO Auto-generated catch block
                    e.printStackTrace();
                    
                list.setItemChecked(position, true);
                } catch (Exception e){
                    e.printStackTrace();
                }
            }
        });
    }
                

    private List<TiposDeEnsaios> listTiposDeEnsaioOBJ(Long idEquipamento) throws Exception {
        List<TiposDeEnsaios> ensaios = DataManager.getInstance()
                .getTipoEquipamentoEnsaioDao()
                .findEnsaioByIdEquipamento(idEquipamento);
// List<TiposDeEnsaios> tiposDeEnsaiosOBJ =
        // DataManager.getInstance().getTiposDeEnsaiosList();
        return ensaios;
    }

    private void popularListView() throws Exception {
        ArrayAdapter<TiposDeEnsaios> adapter = new ListTiposDeEnsaiosAdapter(
                this.getActivity(), R.layout.item_list_botoes_ensaios,
                listTiposDeEnsaioOBJ(idEquipamento));
        list.setAdapter(adapter);
        Log.e("popularListView()", "passou pela fun��o");
    }
// @Override
// public void onClick(View view) {
// // TODO Auto-generated method stub
// switch (view.getId()) {
// case R.button.camera:
//// numeroDeSerie = numeroDeSerieEdit.getText().toString();
//// codOper = codOperEdit.getText().toString();
////
//// try {
//// if (processamentoDadosDao(CAMERA)) {
//// Intent intent = new Intent(
//// MediaStore.ACTION_IMAGE_CAPTURE);
//// Uri fileUri = getOutputMediaFileUri(TypeMedia.IMAGE,
//// equipamento.getCodOperacao(),
//// equipamento.getNumeroSerie());
//// path = fileUri.getPath();
//// foto.setUrl(path);
//// intent.putExtra(MediaStore.EXTRA_OUTPUT, fileUri);
//// startActivityForResult(intent,
//// CAPTURE_IMAGE_ACTIVITY_REQUEST_CODE);
//// }
// break;
// default:
// break;
// }
// }
//
}


IdentificadorDF

package br.com.coelce.comissionamento.dialogFragment;

import android.app.Activity;
import android.app.DialogFragment;
import android.app.FragmentManager;
import android.app.Fragment;
import android.net.Uri;
import android.os.Bundle;
//import android.support.v4.app.DialogFragment;
//import android.support.v4.app.Fragment;
//import android.support.v4.app.FragmentManager;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.view.Window;
import android.widget.Button;
import android.widget.EditText;
import br.com.coelce.comissionamento.R;
import br.com.coelce.comissionamento.model.Equipamento;
import br.com.coelce.comissionamento.model.Foto;
import br.com.coelce.comissionamento.persistence.DataManager;

public class IdentificadorDF extends Fragment {

private Button ok, cancelar, camera;
protected static final String FRAGMENT_UNIVERSAL = "FragmentUniversal";
private static final int CAPTURE_IMAGE_ACTIVITY_REQUEST_CODE = 100;
public static final int MEDIA_TYPE_IMAGE = 1;
public static final int MEDIA_TYPE_VIDEO = 2;
private static final int CAMERA = 2;
private static final int OK = 1;
private Uri fileUri;
private String path;
private static String numeroDeSerie;
private static String codOper;
private Long codOperLong;
private EditText numeroDeSerieEdit, codOperEdit;
private Foto foto;
private long id;
private static Equipamento equipamento;
private static Long idEquipamento;
private FragmentManager fragmentManager;
private Fragment fragment;
private View.OnClickListener clickListener;
private Bundle dados;
public static IdentificadorDF newInstance(){
IdentificadorDF f = new IdentificadorDF();
       // Supply num input as an argument.
Bundle args = new Bundle();
       args.putString("numeroDeSerie", numeroDeSerie);
       args.putString("codOper", codOper);
       args.putLong("idEquipamento", idEquipamento);
       args.putSerializable("equipamento", equipamento);
       f.setArguments(args);
       return f;
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
View view = inflater.inflate(R.layout.dialog_fragment_id, container);
//Bot�o c�mera com a��o para Activity
view.findViewById(R.button.camera).setOnClickListener(clickListener);
//    if (getDialog() != null) {
//        getDialog().setCanceledOnTouchOutside(false);
//    }
// getDialog().getWindow().requestFeature(Window.FEATURE_NO_TITLE);
// setCancelable(false);
Log.i("OnCREATE", "IdentificadorDF...");

numeroDeSerieEdit = (EditText) view
.findViewById(R.editText.dialog_NDeSerie);
codOperEdit = (EditText) view.findViewById(R.editText.dialog_CodOper);
foto = new Foto();
// DataManager.getInstance().resetCurrentEquipamento();
equipamento = DataManager.getInstance().getCurrentEquipamento();
idEquipamento = equipamento.getIdTipoEquipamento();

return view;
}
@Override
public void onAttach(Activity activity) {
super.onAttach(activity);
try {
// Instanciar o NoticeDialogListener para que possamos enviar os eventos para o host
clickListener = (View.OnClickListener) activity;
} catch (ClassCastException e) {
// The activity doesn't implement the interface, throw exception
throw new ClassCastException(activity.toString()
+ " n�o implementa QuestionDialogListener");
}
}

}



Darlan C. de Sousa

unread,
May 16, 2014, 11:07:51 AM5/16/14
to ce...@googlegroups.com

O código ta grande mesmo... Hehe
To examinando, geralmente o log identifica a linha do erro... No seu o q diz? Manda o log do erro tbm.

Marcos Vinithius Melo Filho

unread,
May 16, 2014, 1:14:45 PM5/16/14
to ce...@googlegroups.com
Digite o código05-16 14:07:43.001: E/AndroidRuntime(12514): FATAL EXCEPTION: main

05-16 14:07:43.001: E/AndroidRuntime(12514): java.lang.IllegalStateException: The specified child already has a parent. You must call removeView() on the child's parent first.

05-16 14:07:43.001: E/AndroidRuntime(12514): at android.view.ViewGroup.addViewInner(ViewGroup.java:3348)

05-16 14:07:43.001: E/AndroidRuntime(12514): at android.view.ViewGroup.addView(ViewGroup.java:3219)

05-16 14:07:43.001: E/AndroidRuntime(12514): at android.view.ViewGroup.addView(ViewGroup.java:3176)

05-16 14:07:43.001: E/AndroidRuntime(12514): at android.view.ViewGroup.addView(ViewGroup.java:3156)

05-16 14:07:43.001: E/AndroidRuntime(12514): at android.app.FragmentManagerImpl.moveToState(FragmentManager.java:839)

05-16 14:07:43.001: E/AndroidRuntime(12514): at android.app.FragmentManagerImpl.moveToState(FragmentManager.java:1032)

05-16 14:07:43.001: E/AndroidRuntime(12514): at android.app.BackStackRecord.run(BackStackRecord.java:622)

05-16 14:07:43.001: E/AndroidRuntime(12514): at android.app.FragmentManagerImpl.execPendingActions(FragmentManager.java:1382)

05-16 14:07:43.001: E/AndroidRuntime(12514): at android.app.FragmentManagerImpl$1.run(FragmentManager.java:426)

05-16 14:07:43.001: E/AndroidRuntime(12514): at android.os.Handler.handleCallback(Handler.java:605)

05-16 14:07:43.001: E/AndroidRuntime(12514): at android.os.Handler.dispatchMessage(Handler.java:92)

05-16 14:07:43.001: E/AndroidRuntime(12514): at android.os.Looper.loop(Looper.java:137)

05-16 14:07:43.001: E/AndroidRuntime(12514): at android.app.ActivityThread.main(ActivityThread.java:4514)

05-16 14:07:43.001: E/AndroidRuntime(12514): at java.lang.reflect.Method.invokeNative(Native Method)

05-16 14:07:43.001: E/AndroidRuntime(12514): at java.lang.reflect.Method.invoke(Method.java:511)

05-16 14:07:43.001: E/AndroidRuntime(12514): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:790)

05-16 14:07:43.001: E/AndroidRuntime(12514): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:557)

05-16 14:07:43.001: E/AndroidRuntime(12514): at dalvik.system.NativeStart.main(Native Method)

05-16 14:07:43.017: W/ActivityManager(219):   Force finishing activity br.com.coelce.comissionamento/.fragment.ActivityPrincipal

05-16 14:07:43.056: E/android.os.Debug(219): !@Dumpstate > dumpstate -k -t -n -z -d -o /data/log/dumpstate_app_error
 aqui...

Jordi Lucas

unread,
May 16, 2014, 1:35:36 PM5/16/14
to ce...@googlegroups.com
Coloca pra rodar em Debug e tenta ver se mostra o erro!
Jordi Lucas
Técnico de Informática 
Graduando - Sistemas de Informação

Marcos Vinithius Melo Filho

unread,
May 16, 2014, 1:40:59 PM5/16/14
to ce...@googlegroups.com
Fala Jordi!

Cara, eu pensei nisso também, mas estou usando o Netbeans para este projeto e a p#$%@ do Debug está desabilitado, ainda estou vendo como resolver isso, meu Eclipse deu pau no projeto ai migrei...
<font color
...

Jordi Lucas

unread,
May 16, 2014, 1:42:41 PM5/16/14
to ce...@googlegroups.com
Vê ai no android studio


--
Você recebeu essa mensagem porque está inscrito no grupo quot;CEJUG" dos Grupos do Google.
Para cancelar inscrição nesse grupo e parar de receber e-mails dele, envie um e-mail para cejug+un...@googlegroups.com.
Para postar nesse grupo, envie um e-mail para ce...@googlegroups.com.
Acesse esse grupo em http://groups.google.com/group/cejug.
Para mais opções, acesse https://groups.google.com/d/optout.

Paulo Roberto Oliveira Braga

unread,
May 16, 2014, 1:52:15 PM5/16/14
to ce...@googlegroups.com

Abre o projeto no intellij.

Marcos Vinithius Melo Filho

unread,
May 16, 2014, 1:54:22 PM5/16/14
to ce...@googlegroups.com
Vou tentar, mas o projeto tem Mavem, nem sei se vai rodar... vou ver!
...

Marcos Vinithius Melo Filho

unread,
May 16, 2014, 2:10:44 PM5/16/14
to ce...@googlegroups.com
Baixando...
Fala Jordi!

//<span style="white-spa
...

Marcos Vinithius Melo Filho

unread,
May 23, 2014, 3:03:00 PM5/23/14
to ce...@googlegroups.com
Fala pessoal!!! 

Problema resolvido, é incrível o que um "FALSE" faz! Passei este tempo procurando alternativas, andei em círculos e voltei para o mesmo problema, foi quando fiz uma pesquisa mais especifica, acabei encontrado este link https://groups.google.com/forum/#!searchin/androidbrasil-dev/The$20specified$20child$20already$20has$20a$20parent.$20You$20must$20call$20removeView()$20on$20the$20child$27s$20parent$20first.|sort:relevance/androidbrasil-dev/xSdUd-jmspQ/fJyq2bEvGPYJ

Simples! Porém com pouco conteúdo na internet a respeito... compartilhem!
Reply all
Reply to author
Forward
0 new messages