Solucionado (ver solução)

Importante

Você está vendo a versão anterior da nova experiência da Alura que estamos preparando para você. Em breve, ela ganha uma identidade visual novinha totalmente pensada em potencializar seus estudos!

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