【问题标题】:Recyclerview call contacts Android studioRecyclerview 通话联系人 Android studio
【发布时间】:2018-04-25 05:02:00
【问题描述】:

我有一个 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>

【问题讨论】:

  • 你到底想要什么?你需要打电话给选定的联系人吗?
  • 只需将您的vHolder.item_contact.setOnClickListener 代码块放入OnBindViewHolder
  • 我认为你应该检查下面的链接it
  • 是的,我希望所选联系人拨打您的号码
  • 使用以下代码:- String number = "1234" Intent intent = new Intent(Intent.ACTION_CALL); intent.setData(Uri.parse("tel:" +number));开始活动(意图);在清单文件中添加权限为:-

标签: android android-studio android-recyclerview


【解决方案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 中的错误(意图);请帮忙
  • 对不起,它将是持有人,我已经编辑了我的答案。放置 holder 而不是 vHolder
  • 在你的情况下使用这个 mContext.startActivity(intent)。
  • 谢谢,如果它有效。有什么方法可以直接拨打电话而不通过股票应用程序?
  • 不,它可以直接打开您的默认拨号器。很高兴听到它有帮助。您可以投票并接受它。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2023-01-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-06-22
  • 2014-03-30
  • 1970-01-01
相关资源
最近更新 更多