Dentro de mi fragmento tengo un botón y cuando presiono el botón, quiero realizar una llamada.

Sin embargo, cuando hago clic en el botón, parece que no sucede nada, ¿qué estoy haciendo mal aquí?

Este es mi código de fragmento:

package fr.aitec_informatique.aitecinformatiques;


import android.Manifest;
import android.content.Intent;
import android.content.pm.PackageManager;
import android.net.Uri;
import android.os.Bundle;
import android.support.v4.app.ActivityCompat;
import android.support.v4.app.Fragment;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.Button;
import android.content.Context;
import android.widget.ListView;

/**
 * A simple {@link Fragment} subclass.
 */
public class HomeFragment extends Fragment {

    Button dial;

    private Context mContext;

    public HomeFragment() {
        // Required empty public constructor
    }

    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
                             Bundle savedInstanceState){
        View v = inflater.inflate(R.layout.fragment_home, container, false);

        v.findViewById(R.id.dial);

        return v;
    }
    public void onDialButton(View v) {
        Intent intent = new Intent(Intent.ACTION_CALL);
        intent.setData(Uri.parse("tel:xxxxxxxxxx"));

        if (ActivityCompat.checkSelfPermission(getActivity(), Manifest.permission.CALL_PHONE) != PackageManager.PERMISSION_GRANTED) {
            return;
        }
        startActivity(intent);
    }
}
-1
Shiro Sora 16 oct. 2018 a las 18:40

2 respuestas

La mejor respuesta

Inicialice la Button así:

dial = v.findViewById(R.id.dial);

Sucede que tal vez no definiste bien el Button. getActivity() funciona en realidad.

Además, onDialButton nunca se usó. En su lugar, agregue un oyente al Button y luego llame al onDialButton:

dial.setOnClickListener(new View.OnClickListener() {
    @Override
    public void onClick(View view) {

      onDialButton();
    }
});

Actualización:

Deberías utilizar ContextCompat.checkSelfPermission hoy en día:

public void onDialButton() {

    if (ContextCompat.checkSelfPermission(getApplicationContext(), Manifest.permission.CALL_PHONE) != PackageManager.PERMISSION_GRANTED) {
        // Permission is not granted
    }
    // first check for the permission

    Intent intent = new Intent(Intent.ACTION_CALL);
    intent.setData(Uri.parse("tel:xxxxxxxxxx"));
    startActivity(intent);
}

Y simplemente llame a onDialButton() en su onClick().

Lea la documentación: https://developer.android.com/training/permissions/requesting# java

0
ʍѳђઽ૯ท 17 oct. 2018 a las 08:27

Creo que no estás usando un OnClickListener normal.

Prueba esto:

public class HomeFragment extends Fragment {

Button dial;

private Context mContext;

public HomeFragment() {
    // Required empty public constructor
}

@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
                         Bundle savedInstanceState){
    View v = inflater.inflate(R.layout.fragment_home, container, false);

    dial = (Button)v.findViewById(R.id.dial);
      //I think dial is the id of your button

    dial.setOnClickListener(new View.OnClickListener() {
    public void onClick(View v) {
        onDialButton();
    }
});

    return v;
}
public void onDialButton() {
    Intent intent = new Intent(Intent.ACTION_CALL);
    intent.setData(Uri.parse("tel:xxxxxxxxxx"));

    if (ActivityCompat.checkSelfPermission(getActivity(), Manifest.permission.CALL_PHONE) != PackageManager.PERMISSION_GRANTED) {
        return;
    }
    startActivity(intent);
 }
}
0
Jakob 16 oct. 2018 a las 15:51