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

Menu de contexto em um TextView

estou fazendo o projeto do curso mas adicionei uma nova activity para mostrar o perfil do aluno e estou implementando a parte de sms, geo, browser e ligação nessa classe quando clico em cima dos respectivos campos, que no caso sãoTextViews, pra isso usei o findviewbyid e setOnClickListner no text view e nao da maneira como esta no curso que é criar o contextMenu. o problema é que para fazer ligação e mandar sms o mesmo textView é acionado, eu queria adicionar um contextMenu no momento de um click simples no TextView telefone aparecendo as opçoes de mandar sms ou fazer ligação.

Tem uma maneira que eu possa fazer isso?

vou postar aqui o codigo do PerfilAlunoActivity:

public class PerfilAlunoActivity extends AppCompatActivity {

    private Aluno aluno;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_perfil_aluno);

        PerfilAlunoHelper helper = new PerfilAlunoHelper(this);
        Intent intent = getIntent();
        aluno = (Aluno) intent.getSerializableExtra("aluno");
        helper.preenchePerfil(aluno);

        TextView nomePerfil = (TextView) findViewById(R.id.Nome_Perfil);
        nomePerfil.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                Toast.makeText(PerfilAlunoActivity.this,"sim, meu nome é"+aluno.getNome(),Toast.LENGTH_LONG).show();
               }
        });

        TextView enderecoPerfil = (TextView)findViewById(R.id.Endereco_Perfil);
        enderecoPerfil.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                Intent mapa = new Intent(Intent.ACTION_VIEW);
                mapa.setData(Uri.parse("geo:0,0?z=14&q="+aluno.getEndereco()));
                startActivity(mapa);
            }
        });

        TextView telefonePerfil = (TextView)findViewById(R.id.Telefone_Perfil);
        telefonePerfil.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                Intent mandaSms = new Intent(Intent.ACTION_VIEW);
                mandaSms.setData(Uri.parse("sms:"+aluno.getTelefone()));
                startActivity(mandaSms);
            }


             });
        TextView SitePerfil = (TextView) findViewById(R.id.Site_Perfil);
        SitePerfil.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                Intent intentSite = new Intent(Intent.ACTION_VIEW);
                String site = aluno.getSite();
                if(!site.startsWith("http://")){
                    site = "http://"+site;
                }
                intentSite.setData(Uri.parse(site));
                //setIntent(intentSite);
                startActivity(intentSite);
            }
        });
    }

    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        MenuInflater inflater = getMenuInflater();
        inflater.inflate(R.menu.menu_perfil,menu);
        return super.onCreateOptionsMenu(menu);
    }

    @Override
    public boolean onOptionsItemSelected(MenuItem item) {
        switch (item.getItemId()) {
            case R.id.menu_perfil_editar:
                Intent vaiParaFormulario = new Intent(this,FormularioActivity.class);
                vaiParaFormulario.putExtra("aluno",aluno);
                startActivity(vaiParaFormulario);
        }
        return super.onOptionsItemSelected(item);
    }
}
2 respostas
solução!

Para abrir um contextMenu em cima de qualquer elemento com apenas um click é só você adicionar um listener ao click com a seguinte função:

suaViewQualquer.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                getActivity().openContextMenu(view);
            }
        });

Mas lembre-se que você só pode registrar um contextMenu para uma view apenas:

registerForContextMenu(suaViewQualquer);

Se quiser criar menus para diferentes views, eu recomendo utilizar o PopupMenu.

PopupMenu popupMenu = new PopupMenu(context, ViewAncora);
popupMenu.inflate(R.menu.menu_popup);

Mas fica ao teu critério.

Opa, lembrando que se você já tiver dentro de uma activity basta chamar o openContextMenu(view); dentro do onClick.

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