Recyclerview вызов контакты Android studio

У меня есть приложение для Android, в котором я использовал RecyclerView, который показывает список контактов. Теперь я хочу, чтобы при выборе контактов звонил по указанному номеру.

Пока все, что он делает, это показывает контакты, но когда я нажимаю на него, он вызывает, он не выполняет никаких действий. Я не знаю, как поставить отметку

Пробовал с onClick() и с кнопочным элементом, но безуспешно

Мой код:

public class RecyclerViewAdapter extends RecyclerView.Adapter<RecyclerViewAdapter.MyViewHolder> {

    private static final String TAG = "RecyclerViewAdapter";

    Context mContext;
    List<Contact> mData;
    Dialog myDialog;
    Button button;



    public RecyclerViewAdapter(Context mContext, List<Contact> mData) {
        this.mContext = mContext;
        this.mData = mData;
    }



    @Override
    public MyViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {

        View v ;
        v = LayoutInflater.from(mContext).inflate(R.layout.single_item_contact,parent,false);
        final MyViewHolder vHolder = new MyViewHolder(v);

        // Dialog ini

        myDialog = new Dialog(mContext);
        myDialog.setContentView(R.layout.dialog_contact);
        myDialog.getWindow().setBackgroundDrawable(new ColorDrawable(Color.TRANSPARENT));





        vHolder.item_contact.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
               // Toast.makeText(mContext,"Text Click item : "+String.valueOf(vHolder.getAdapterPosition()),Toast.LENGTH_SHORT).show();


                TextView dialog_name_tv = (TextView) myDialog.findViewById(R.id.dialog_name_id);
                TextView dialog_phone_tv = (TextView) myDialog.findViewById(R.id.dialog_phone_id);
                ImageView dialog_contact_img = (ImageView)myDialog.findViewById(R.id.dialog_img);
                dialog_name_tv.setText(mData.get(vHolder.getAdapterPosition()).getName());
                dialog_phone_tv.setText(mData.get(vHolder.getAdapterPosition()).getPhone());
                dialog_contact_img.setImageResource(mData.get(vHolder.getAdapterPosition()).getPhoto());


                myDialog.show();
            }
        });


        return vHolder;
    }

    @Override
    public void onBindViewHolder(MyViewHolder holder, final int position) {

        holder.tv_name.setText(mData.get(position).getName());
        holder.tv_phone.setText(mData.get(position).getPhone());
        holder.img.setImageResource(mData.get(position).getPhoto());



    }

    @Override
    public int getItemCount() {
        return mData.size();
    }

    public static class MyViewHolder extends RecyclerView.ViewHolder {

        private LinearLayout item_contact;
        private TextView tv_name;
        private TextView tv_phone;
        private ImageView img;

        public MyViewHolder(View itemView) {
            super(itemView);

            item_contact = (LinearLayout) itemView.findViewById(R.id.contact_item_id);
            tv_name = (TextView) itemView.findViewById(R.id.name_contact);
            tv_phone = (TextView) itemView.findViewById(R.id.phone_contact);
            img = (ImageView) itemView.findViewById(R.id.img_contact);

        }
    }
}

Aquí muestro mi XML de como tengo. Помоги пожалуйста

    <RelativeLayout
    xmlns:android = "http://schemas.android.com/apk/res/android"
    android:layout_width = "350dp"
    android:layout_height = "wrap_content"
    android:layout_gravity = "center"
    >

    <LinearLayout
        android:layout_width = "match_parent"
        android:layout_height = "wrap_content"
        android:layout_alignParentLeft = "true"
        android:layout_alignParentStart = "true"
        android:layout_alignParentTop = "true"
        android:layout_marginTop = "15dp"
        android:background = "#232323"
        android:gravity = "center_horizontal"
        android:orientation = "vertical">

        <TextView
            android:id = "@+id/dialog_name_id"
            android:layout_width = "wrap_content"
            android:layout_height = "wrap_content"
            android:layout_marginTop = "90dp"
            android:text = "Contact Name"
            android:textColor = "@android:color/white"
            android:textSize = "30sp"
            android:textStyle = "bold" />

        <TextView
            android:id = "@+id/dialog_phone_id"
            android:layout_width = "wrap_content"
            android:layout_height = "wrap_content"
            android:layout_marginBottom = "10dp"
            android:layout_marginTop = "5dp"
            android:text = "Phone Number"
            android:textColor = "@android:color/white"
            android:textSize = "23sp" />

        <Button
            android:id = "@+id/dialog_btn_call"
            android:layout_width = "match_parent"
            android:layout_height = "wrap_content"
            android:layout_gravity = "start"
            android:layout_marginTop = "10dp"
            android:background = "@android:color/white"
            android:drawableLeft = "@drawable/dialog_call_black"
            android:drawablePadding = "20dp"
            android:padding = "20dp"
            android:text = "Llamar"
            android:textAlignment = "textStart"
            android:textSize = "25dp" />

        <Button
            android:id = "@+id/dialog_btn_msg"
            android:layout_width = "match_parent"
            android:layout_height = "wrap_content"
            android:layout_gravity = "start"
            android:background = "@android:color/white"
            android:drawableLeft = "@drawable/dialog_message_black"
            android:drawablePadding = "20dp"
            android:padding = "20dp"
            android:text = "Mensaje"
            android:textAlignment = "textStart"
            android:textSize = "25dp" />

    </LinearLayout>

    <ImageView
        android:id = "@+id/dialog_img"
        android:layout_width = "120dp"
        android:layout_height = "120dp"
        android:src = "@drawable/ic_contacts"
        android:padding = "10dp"
        android:layout_centerHorizontal = "true"
        android:layout_alignParentTop = "true"
        />

</RelativeLayout>

что именно ты хочешь? вам нужно вызвать выбранному контакту?

jeet parmar 25.04.2018 07:03

Просто поместите кодовый блок vHolder.item_contact.setOnClickListener в OnBindViewHolder

Naveen T P 25.04.2018 07:05

Я думаю, вам стоит проверить ссылку ниже Это

Android Guru 25.04.2018 07:09

Да, я хочу, чтобы выбранный контакт позвонил на ваш номер

Pedro Islas Reséndiz 25.04.2018 07:35

Используйте следующий код: - String number = "1234" Intent intent = new Intent (Intent.ACTION_CALL); intent.setData (Uri.parse ("тел:" + номер)); startActivity (намерение); добавить разрешение в файл манифеста как: - <uses-permission android: name = "android.permission.CALL_PHONE"> </ uses-permissi‌ on>

Ritesh 25.04.2018 07:41

разбил приложение с этим кодом

Pedro Islas Reséndiz 25.04.2018 08:50
0
6
992
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Вам нужно поместить setOnClickListener () в OnBindViewHolder (). Насколько я понимаю, у вас есть Recycler View, в котором при нажатии элемента вы хотите открыть диалоговое окно dialog_contact, и это диалоговое окно содержит контактную информацию. После открытия этого диалогового окна вы хотите вызвать этому человеку, нажав кнопку вызова в диалоговом окне.

@Override
    public void onBindViewHolder(MyViewHolder holder, final int position) {

        holder.tv_name.setText(mData.get(position).getName());
        holder.tv_phone.setText(mData.get(position).getPhone());
        holder.img.setImageResource(mData.get(position).getPhoto());

        holder.item_contact.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {

             myDialog = new Dialog(mContext);
             myDialog.setContentView(R.layout.dialog_contact);
             myDialog.getWindow().setBackgroundDrawable(new ColorDrawable(Color.TRANSPARENT));    

             myDialog.show();

             TextView dialog_name_tv = (TextView)myDialog.findViewById(R.id.dialog_name_id);
             Button dialog_btn_call= (Button )myDialog.findViewById(R.id.dialog_btn_call);
             TextView dialog_phone_tv = (TextView) myDialog.findViewById(R.id.dialog_phone_id);
             ImageView dialog_contact_img = (ImageView)myDialog.findViewById(R.id.dialog_img);
             dialog_name_tv.setText(mData.get(vHolder.getAdapterPosition()).getName());
             dialog_phone_tv.setText(mData.get(vHolder.getAdapterPosition()).getPhone());
             dialog_contact_img.setImageResource(mData.get(vHolder.getAdapterPosition()).getPhoto());

            dialog_btn_call.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
             //Do your code here
                myDialog.dismiss();
                Intent intent = new Intent(Intent.ACTION_DIAL);
                intent.setData(Uri.parse("tel:" +mData.get(holder.getAdapterPosition()).getPhone()));
                mContext.startActivity(intent);
             }
             }); 


            }
        });


    }

Редактировать:-

Я получаю ошибки в vHolder, это поле? и ошибка в activity.startActivity (intent); пожалуйста помоги

Pedro Islas Reséndiz 25.04.2018 08:41

Извините, он будет держателем, я отредактировал свой ответ. Ставим держатель вместо vHolder

Karan sharma 25.04.2018 08:42

используйте этот mContext.startActivity (intent) в вашем случае.

Karan sharma 25.04.2018 08:48

Спасибо, если сработает. Есть какой-то способ сделать звонок напрямую без прохождения стокового приложения?

Pedro Islas Reséndiz 25.04.2018 08:56

Нет, это хорошо, чтобы открыть номеронабиратель по умолчанию напрямую. Рад слышать, что это помогло. Тогда вы можете проголосовать и принять это.

Karan sharma 25.04.2018 08:58

Еще один быстрый вопрос. Выберите LinearLayout и сделайте вызов. Но я хочу, чтобы кнопка ("dialog_btn_call") выполняла вызов

Pedro Islas Reséndiz 25.04.2018 09:08

Есть ли в вашем линейном макете кнопку dialog_btn_call?

Karan sharma 25.04.2018 09:11

Да, там есть кнопка, и оттуда я хочу, чтобы ты позвонил

Pedro Islas Reséndiz 25.04.2018 09:14

Большое спасибо. Ты лучший.

Pedro Islas Reséndiz 25.04.2018 09:32

Удовольствие все мое :)

Karan sharma 25.04.2018 09:34

Можете ли вы помочь мне в этом другом примере? Пожалуйста stackoverflow.com/questions/50051749/…

Pedro Islas Reséndiz 27.04.2018 00:11

Другие вопросы по теме