luke cross
luke cross

Reputation: 331

IllegalStateException: Fragment FiltroOpcao not attached to a context.- Android Error

I'm trying get item selected from user to fragment formulary on my Android app, following the google documentation this is possible using this methods from the library, i tried implement this methods and your Interface in my DialogFragment and get it on my fragment formulary, but, the error is returned when i click on the button necessary to open Dialog Fragment. This is my Dialog Fragment class:

public class FiltroOpcao extends DialogFragment {
    OnFiltroEscolhido listener;
    private final String[] filtroAnuncio = getResources().getStringArray(R.array.filtro_array);

    @Override
    public void onAttach(@NonNull Context context) {
        super.onAttach(context);
        try {
            listener = (OnFiltroEscolhido) getTargetFragment();
        }catch(ClassCastException e){
            throw new ClassCastException(context.toString()+"Deve ser implementado");
        }
    }

    @NonNull
    @Override
    public Dialog onCreateDialog(@Nullable Bundle savedInstanceState) {
        AlertDialog.Builder builder = new AlertDialog.Builder(getActivity());
        builder.setTitle("Filtrar por:")
                .setItems(R.array.filtro_array, new DialogInterface.OnClickListener() {
                    public void onClick(DialogInterface dialog, int which) {
                        listener.pegarFiltro(filtroAnuncio[which]);
                    }
                });

        return builder.create();

    }
    public interface OnFiltroEscolhido{
        void pegarFiltro (String escolha);
    }
}

And it is where i called the DialogFragment and the crash happens on my VendaFragment fragment class

public void onClick(View v) {
                FiltroOpcao filtroOpcao = new FiltroOpcao();
                filtroOpcao.setTargetFragment(VendaFragment.this, 1);
                filtroOpcao.show(VendaFragment.this.getChildFragmentManager(), "FiltroOpcao");

            }

Upvotes: 0

Views: 307

Answers (1)

guipivoto
guipivoto

Reputation: 18677

private final String[] filtroAnuncio = getResources().getStringArray(R.array.filtro_array);

Probably, getResources() is the problem because you are using it before the fragment was attached.

Try to move the initialization of filtroAnuncio to onCreateDialog()

private String[] filtroAnuncio;

@NonNull
@Override
public Dialog onCreateDialog(@Nullable Bundle savedInstanceState) {
    filtroAnuncio = getResources().getStringArray(R.array.filtro_array);

    AlertDialog.Builder builder = new AlertDialog.Builder(getActivity());
    builder.setTitle("Filtrar por:")
            .setItems(R.array.filtro_array, new DialogInterface.OnClickListener() {
                public void onClick(DialogInterface dialog, int which) {
                    listener.pegarFiltro(filtroAnuncio[which]);
                }
            });

    return builder.create();

}

Upvotes: 2

Related Questions