Solucionado (ver solução)
Solucionado
(ver solução)
10
respostas

context não funciona

com relação a esse trecho de código, o context está dando erro dentro do botão positive(para buscar parametrizadas).

if (item.getItemId() == R.id.menu_lista_prova_Calendário){

            Context context = getContext();

            LinearLayout linearLayout = new LinearLayout(context);
            linearLayout.setOrientation(LinearLayout.VERTICAL);

            final EditText campoInicial = new EditText(context);
            campoInicial.setHint("Inicio");
            campoInicial.setInputType(InputType.TYPE_DATETIME_VARIATION_DATE);

            final EditText campoFinal = new EditText(context);
            campoFinal.setHint("Fim");
            campoFinal.setInputType(InputType.TYPE_DATETIME_VARIATION_DATE);

            linearLayout.addView(campoInicial);
            linearLayout.addView(campoFinal);

            new android.support.v7.app.AlertDialog.Builder(context)
                    .setView(linearLayout)
                    .setMessage("Digite as datas para busca")
                    .setPositiveButton("Buscar", new DialogInterface.OnClickListener() {
                        @Override
                        public void onClick(DialogInterface dialogInterface, int i) {
                            String dataInicioString = campoInicial.getText().toString();
                            String dataFinalString  = campoFinal.getText().toString();

                            Calendar dataInicio = ConversorDeData.converte(dataInicioString);
                            Calendar dataFinal  = ConversorDeData.converte(dataFinalString);

                            GerarDatabase gerarDatabase = new GerarDatabase();
                            AppDataBase dataBase = gerarDatabase.gera(context);// erro aqui
                            ProvaDao provaDao = dataBase.getProvaDao();
                            List<Prova> provas = provaDao.buscaPeloPeriodo(dataInicio, dataFinal);

                            configuraAdapter(context, provas);//erro aqui

                        }
                    })
                    .show();
        }
    }
10 respostas

Fala ai Guilherme, tranquilo ?

Acredito que você se esqueceu de falar que o contexto é final, dado que a gente está usando ele dentro de uma classe anonima.

final Context context = getContext();

Fala pra gente se deu certo depois :D

fiz essa alteração na variável do Context, inserindo o "final", as variáveis context que estavam dentro do potão positive, não estão mais com erros, porém a variável Context inicial com final está dando erro:

//erro mudou para aqui
final Context context  =  getContext();

Guilherme,

Qual é o erro que está sendo mostrado ?

Não devia ter nenhum erro nessa linha :(

fiz um Rebuild aqui e gerou esses dois erros:

Error:(82, 9) error: unreachable statement

Error:(123, 5) error: missing return statement

Me mostra seu código inteiro por favor ?

PARTE 1:

public class ListaProvasFragment extends android.support.v4.app.Fragment{

    private FloatingActionButton botaoADD;
    private ProvaDelegate delegate;
    private ProvaDao provaDao;
    private ListView listaProvas;



    @Override
    public void onCreate(@Nullable Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

        delegate = (ProvaDelegate) getActivity();
        delegate.mostrarNomeActivity("Lista Provas");

        //para ativar o menu na barra..
        setHasOptionsMenu(true);
    }

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

        View view = inflater.inflate(R.layout.fragment_lista, container, false);

        exibirLista(view);

        configBotaoADD(view);

        return view;
    }

    //****INFLANDO MENU****
    @Override
    public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) {
        super.onCreateOptionsMenu(menu, inflater);

        inflater.inflate(R.menu.lista_provas_menu, menu);
    }

    //****OPCOES PARA MENU****
    @Override
    public boolean onOptionsItemSelected(MenuItem item) {
        return super.onOptionsItemSelected(item);

        if (item.getItemId() == R.id.menu_lista_prova_Calendário){

            final Context context = getContext();

            LinearLayout linearLayout = new LinearLayout(context);
            linearLayout.setOrientation(LinearLayout.VERTICAL);

            final EditText campoInicial = new EditText(context);
            campoInicial.setHint("Inicio");
            campoInicial.setInputType(InputType.TYPE_DATETIME_VARIATION_DATE);

            final EditText campoFinal = new EditText(context);
            campoFinal.setHint("Fim");
            campoFinal.setInputType(InputType.TYPE_DATETIME_VARIATION_DATE);

            linearLayout.addView(campoInicial);
            linearLayout.addView(campoFinal);

            new android.support.v7.app.AlertDialog.Builder(context)
                    .setView(linearLayout)
                    .setMessage("Digite as datas para busca")
                    .setPositiveButton("Buscar", new DialogInterface.OnClickListener() {
                        @Override
                        public void onClick(DialogInterface dialogInterface, int i) {
                            String dataInicioString = campoInicial.getText().toString();
                            String dataFinalString  = campoFinal.getText().toString();

                            Calendar dataInicio = ConversorDeData.converte(dataInicioString);
                            Calendar dataFinal  = ConversorDeData.converte(dataFinalString);

                            GerarDatabase gerarDatabase = new GerarDatabase();
                            AppDataBase dataBase = gerarDatabase.gera(context);
                            ProvaDao provaDao = dataBase.getProvaDao();
                            List<Prova> provas = provaDao.buscaPeloPeriodo(dataInicio, dataFinal);

                            configuraAdapter(context, provas);

                        }
                    })
                    .show();
        }
    }

PARTE 2:

  //****Configurando botão para adicionar prova****
    private void configBotaoADD(View view) {
        botaoADD = view.findViewById(R.id.fragment_lista_fab);

        botaoADD.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                  ProvaDelegate delegate = (ProvaDelegate) getActivity();

                  delegate.clickFab();

            }
        });
    }


    //****Configurando listagem para exibir prova****
    private void exibirLista(View view) {
        listaProvas = view.findViewById(R.id.fragment_lista);

        Context context = getContext();

        GerarDatabase gerar = new GerarDatabase();
        AppDataBase database = gerar.gera(context);
        final ProvaDao provaDao = database.getProvaDao();

        List<Prova> provas = provaDao.busca();

        final ArrayAdapter<Prova> adapter = configuraAdapter(context, provas);

        listaProvas.setOnItemClickListener(new AdapterView.OnItemClickListener() {
            @Override
            public void onItemClick(AdapterView<?> adapterView, View view, int i, long l) {
                Prova prova = (Prova) listaProvas.getItemAtPosition(i);

                delegate.itemSelecionado(prova);
            }
        });

        listaProvas.setOnItemLongClickListener(new AdapterView.OnItemLongClickListener() {
            @Override
            public boolean onItemLongClick(AdapterView<?> adapterView, View view, int i, long l) {

                final Prova prova = (Prova) listaProvas.getItemAtPosition(i);

                Snackbar.make(botaoADD, "Deseja deletar essa prova?", Snackbar.LENGTH_SHORT)
                        .setAction("Sim", new View.OnClickListener() {
                            @Override
                            public void onClick(View view) {
                                provaDao.delete(prova);

                                adapter.remove(prova);
                            }
                        }).show();

                return true;
            }
        });
    }

    @NonNull
    private ArrayAdapter<Prova> configuraAdapter(Context context, List<Prova> provas) {
        final ArrayAdapter<Prova> adapter = new ArrayAdapter<>(context, android.R.layout.simple_list_item_1, provas);
        listaProvas.setAdapter(adapter);
        return adapter;
    }

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

        delegate.mostrarNomeActivity("Lista Prova");
    }
}
solução!

Identifiquei o problema :(

@Override
    public boolean onOptionsItemSelected(MenuItem item) {
        return super.onOptionsItemSelected(item);

        if (item.getItemId() == R.id.menu_lista_prova_Calendário){

            final Context context = getContext();

            LinearLayout linearLayout = new LinearLayout(context);
            linearLayout.setOrientation(LinearLayout.VERTICAL);

            final EditText campoInicial = new EditText(context);
            campoInicial.setHint("Inicio");
            campoInicial.setInputType(InputType.TYPE_DATETIME_VARIATION_DATE);

            final EditText campoFinal = new EditText(context);
            campoFinal.setHint("Fim");
            campoFinal.setInputType(InputType.TYPE_DATETIME_VARIATION_DATE);

            linearLayout.addView(campoInicial);
            linearLayout.addView(campoFinal);

            new android.support.v7.app.AlertDialog.Builder(context)
                    .setView(linearLayout)
                    .setMessage("Digite as datas para busca")
                    .setPositiveButton("Buscar", new DialogInterface.OnClickListener() {
                        @Override
                        public void onClick(DialogInterface dialogInterface, int i) {
                            String dataInicioString = campoInicial.getText().toString();
                            String dataFinalString  = campoFinal.getText().toString();

                            Calendar dataInicio = ConversorDeData.converte(dataInicioString);
                            Calendar dataFinal  = ConversorDeData.converte(dataFinalString);

                            GerarDatabase gerarDatabase = new GerarDatabase();
                            AppDataBase dataBase = gerarDatabase.gera(context);
                            ProvaDao provaDao = dataBase.getProvaDao();
                            List<Prova> provas = provaDao.buscaPeloPeriodo(dataInicio, dataFinal);

                            configuraAdapter(context, provas);

                        }
                    })
                    .show();
        }
    }

Dá uma olhadinha no que você faz na primeira linha :

        return super.onOptionsItemSelected(item);

Você está fazendo o return, logo tudo que foi escrito depois disso não será executado, por isso esta ocorrendo esse problema.

Para solucionar, basta jogar o return pro final desse bloco de código.

Eita, você é fera. Resolveu sim.. Muito obrigado..

show!!!

O que precisar pode mandar outras dúvidas!

Espero que esteja gostando do curso :D

Quer mergulhar em tecnologia e aprendizagem?

Receba a newsletter que o nosso CEO escreve pessoalmente, com insights do mercado de trabalho, ciência e desenvolvimento de software