【问题标题】:Call intent on Recycler View [closed]Recyclerview中的呼叫意图[关闭]
【发布时间】:2020-06-30 20:47:12
【问题描述】:

这是我的Recycler Adapter。我想在点击通话按钮时拨打通话。我不知道该怎么办。 请帮我 我在持有人上添加了通话按钮。之后我什么都不知道了。 这个申请是为我当地的血库做的。 所以请立即帮助我。

import android.content.Context;
import android.content.Intent;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.Button;
import android.widget.LinearLayout;
import android.widget.TextView;
import android.widget.Toast;

import androidx.annotation.NonNull;
import androidx.recyclerview.widget.RecyclerView;
import com.firebase.ui.firestore.FirestoreRecyclerAdapter;
import com.firebase.ui.firestore.FirestoreRecyclerOptions;
import com.google.firebase.database.snapshot.Index;
import com.google.firebase.firestore.DocumentSnapshot;

public class NoteAdapter extends FirestoreRecyclerAdapter<Note, NoteAdapter.NoteHolder> {

    ListActivity listActivity;
    Context context;
    public NoteAdapter(@NonNull FirestoreRecyclerOptions<Note> options) {
        super (options);
    }

    @Override
    protected void onBindViewHolder(@NonNull NoteHolder holder, final int position, @NonNull final Note model) {
        holder.name.setText (model.getName ());
        holder.place.setText (model.getPlace ());
        holder.location.setText (model.getMuncipality ());
        holder.blood.setText (model.getBloodgroup ());
        holder.number.setText (model.getNumber ());

    }

    @NonNull
    @Override
    public NoteHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
        View view= LayoutInflater.from (parent.getContext ()).inflate (R.layout.item_view,parent,false);
        return new NoteHolder (view);
    }

    static class NoteHolder extends RecyclerView.ViewHolder{
        ListActivity listActivity;
        Context context;
        TextView name;
        TextView place;
        TextView blood;
        TextView location;
        TextView number;
        Button call;

        public NoteHolder(@NonNull View itemView) {
            super (itemView);
            name=itemView.findViewById (R.id.Name);
            place=itemView.findViewById (R.id.Place);
            blood=itemView.findViewById (R.id.Blood_group);
            location=itemView.findViewById (R.id.Muncipality);
            number=itemView.findViewById (R.id.mobileNumber);
            call=itemView.findViewById (R.id.call);

        }

    }
}

【问题讨论】:

  • 您尝试过什么或发现什么对您有帮助? “我不知道该怎么做”没有帮助。此外,说“所以请立即帮助我。”不是寻求帮助的好方法

标签: android google-cloud-firestore android-recyclerview onitemclicklistener


【解决方案1】:

你也可以这样直接传数字。

Intent intent = new Intent(Intent.ACTION_CALL);
intent.setData(Uri.parse("tel:" + model.getNumber());
context.startActivity(intent);

【讨论】:

    【解决方案2】:

    首先,您需要将 Context 传递给您的适配器。

    Context context;
    public NoteAdapter(@NonNull FirestoreRecyclerOptions<Note> options,Context ctx) {
        super (options);
        content = ctx
    }
    

    之后,您可以使用上下文调用您的 Intent。

    Intent intent = new Intent(Intent.ACTION_CALL);
    intent.setData(Uri.parse("tel:" + Pass You TelePhone Number));
    context.startActivity(intent);
    

    您的最终代码如下所示。

    public class NoteAdapter extends FirestoreRecyclerAdapter<Note, NoteAdapter.NoteHolder> {
    
        ListActivity listActivity;
        Context context;
        public NoteAdapter(@NonNull FirestoreRecyclerOptions<Note> options,Context ctx) {
            super (options);
            content = ctx
        }
    
        @Override
        protected void onBindViewHolder(@NonNull NoteHolder holder, final int position, @NonNull final Note model) {
            holder.name.setText (model.getName ());
            holder.place.setText (model.getPlace ());
            holder.location.setText (model.getMuncipality ());
            holder.blood.setText (model.getBloodgroup ());
            holder.number.setText (model.getNumber ());
            holder.call.setOnClickListener(new OnClickListener() {
                public void onClick(View v) {
                    Intent intent = new Intent(Intent.ACTION_CALL);
                    intent.setData(Uri.parse("tel:" + Pass You TelePhone Number));
                    context.startActivity(intent);
                } 
            });
        }
    
        @NonNull
        @Override
        public NoteHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
            View view= LayoutInflater.from (parent.getContext ()).inflate (R.layout.item_view,parent,false);
            return new NoteHolder (view);
        }
    
        static class NoteHolder extends RecyclerView.ViewHolder{
            ListActivity listActivity;
            Context context;
            TextView name;
            TextView place;
            TextView blood;
            TextView location;
            TextView number;
            Button call;
    
            public NoteHolder(@NonNull View itemView) {
                super (itemView);
                name=itemView.findViewById (R.id.Name);
                place=itemView.findViewById (R.id.Place);
                blood=itemView.findViewById (R.id.Blood_group);
                location=itemView.findViewById (R.id.Muncipality);
                number=itemView.findViewById (R.id.mobileNumber);
                call=itemView.findViewById (R.id.call);
    
            }
    
        }
    }
    

    不要忘记将相关权限添加到您的清单中:

    <uses-permission android:name="android.permission.CALL_PHONE" />
    

    【讨论】:

    • 当我做这个方法时```适配器=new NoteAdapter(options)```出错
    • 您需要在初始化适配器时传递上下文。像这样“适配器 =new NoteAdapter(options,context)”。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多