getSystemService() 不适用于适配器 Class

getSystemService() not working on Adapter Class

我试图将 onClickListener 添加到 RecyclerView 中的一个按钮,它会复制一个字符串,但它说 getSystemService(CLIPBOARD_SERVICE) 不可用。

public void onBindViewHolder(ViewHolder holder, int position) {
        holder.title.setText(cardItems.get(position).title);
        holder.content.setText(cardItems.get(position).content);
        holder.copyButton.setOnClickListener(new View.OnClickListener(){
            public void onClick(View v){

                myClipboard = (ClipboardManager)getSystemService(CLIPBOARD_SERVICE);
                String text;
                text = EditText.getText().toString();
                myClip = ClipData.newPlainText("text", text);
                myClipboard.setPrimaryClip(myClip);

                Toast.makeText(getApplicationContext(), "Text Copied", Toast.LENGTH_SHORT).show();
            }
        });
    }

您必须使用上下文来获取 System Service,将其添加到构造函数中并在创建适配器时将其作为参数传递:

private Context context;

//Constructor 
public YourAdapter(Context context){
this.context = context;
}

public void onBindViewHolder(ViewHolder holder, int position) {
        holder.title.setText(cardItems.get(position).title);
        holder.content.setText(cardItems.get(position).content);
        holder.copyButton.setOnClickListener(new View.OnClickListener(){
            public void onClick(View v){

                myClipboard = (ClipboardManager)context.getSystemService(CLIPBOARD_SERVICE);
                String text;
                text = EditText.getText().toString();
                myClip = ClipData.newPlainText("text", text);
                myClipboard.setPrimaryClip(myClip);

                Toast.makeText(getApplicationContext(), "Text Copied", Toast.LENGTH_SHORT).show();
            }
        });
    }

您需要 Context 才能做到这一点。执行:

...
public void onClick(View v) {
    myClipboard = (ClipboardManager) v.getContext().getSystemService(CLIPBOARD_SERVICE);
    ...
}

试试这个

在适配器 class 中:添加此构造函数

private Activity mActivity;

    public adapter(Activity activity){
         mActivity = activity;
}

然后通过这个 mActivity 变量调用 getSystemService()

myClipboard =(ClipboardManager)mActivity.getSystemService(CLIPBOARD_SERVICE);

适配器没有自己的 existence.its 适用于 activity。因此,如果您想调用该类型的服务或其他 activity 事物,您必须传递正在使用此适配器的 activity 的上下文。所以用 context

打电话

喜欢

 myClipboard = (ClipboardManager)context.getSystemService(CLIPBOARD_SERVICE);