【问题标题】:Contact via Recycler View and receive from Model Data通过 Recycler View 联系并从模型数据中接收
【发布时间】:2021-07-22 12:11:52
【问题描述】:

我希望通过 Recycler View 和 Model Data 调用和调用用户号

在适配器中,我使用了以下代码,但它给出了错误

适配器中的代码:

holder.call.setOnClickListener(new View.OnClickListener(){ @覆盖 public void onClick(View v) {

            String number=model.getNumber();
            String call="tel:"+number.trim();
            Intent intent=new Intent(Intent.ACTION_CALL);
            intent.setData(Uri.parse(call));
            intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
            context.startActivity(intent);

        }
    });

错误: enter image description here

源代码:

public class Adapter extends RecyclerView.Adapter<Adapter.Holder> {

    Context context;
    List<Model> models=new ArrayList<>();

    ModelListener modelListener;

    public Adapter(ModelListener modelListener) {
        this.modelListener = modelListener;
    }

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

    @Override
    public void onBindViewHolder(@NonNull Holder holder, int position) {
        Model model=models.get(position);

        holder.name.setText(model.getName());
        holder.number.setText(model.getNumber());


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

                final String number = model.getNumber();
                final Uri numberToCall = Uri.parse("tel:" + number);
                final Intent intent = new  Intent(Intent.ACTION_DIAL, numberToCall);
                intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
                context.startActivity(intent);

            }
        });
    }

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

    public class Holder extends RecyclerView.ViewHolder{

        TextView name,number;
        ImageView delete,edit,call;

        public Holder(@NonNull View itemView) {
            super(itemView);

            name=itemView.findViewById(R.id.txt_name);
            number=itemView.findViewById(R.id.txt_number);
            call=itemView.findViewById(R.id.call);

        }
    }
}

【问题讨论】:

  • 您在这一行出现错误context.startActivity(intent); 因为您的上下文为空

标签: java android android-studio


【解决方案1】:

你需要使用requireContext()来避免null

holder.call.setOnClickListener(new View.OnClickListener() {
   @Override
   public void onClick(View v) {
      final String number = model.getNumber();
      final Uri numberToCall = Uri.parse("tel:" + number);
      final Intent intent = new  Intent(Intent.ACTION_DIAL, numberToCall);
      context.startActivity(intent); //Use back context
}

更新:

Context再添加一个参数。

public Adapter(ModelListener modelListener, Context context) {
    this.modelListener = modelListener;
    this.context = context;
}

当您调用adapter 时,您传递了值context。也许你会有这样的东西。

final Adapter mAdapter = new Adapter(modelListener, this);

【讨论】:

  • 我应该在哪里写RequireContext?!
  • @mrp 我已经更新了答案。可以检查
  • 某些行已正确更新但是我的意思是在哪里写 requireContext() 方法,因为我收到错误并且我没有这样的方法
  • @mrp 你的 android studio 版本是多少?
  • android studio 4.2.1版
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2021-08-28
  • 1970-01-01
  • 2021-12-14
  • 2022-01-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多