1

我试图将 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();
            }
        });
    }
4

4 回答 4

4

你需要一个Context才能做到这一点。履行:

...
public void onClick(View v) {
    myClipboard = (ClipboardManager) v.getContext().getSystemService(CLIPBOARD_SERVICE);
    ...
}
于 2017-04-06T13:13:49.927 回答
2

适配器没有自己的存在。它为活动而工作。因此,如果您想调用该类型的服务或其他活动事物,则必须传递使用此适配器的该活动的上下文。所以打电话context

喜欢

 myClipboard = (ClipboardManager)context.getSystemService(CLIPBOARD_SERVICE);
于 2017-04-06T13:21:10.747 回答
0

您必须使用上下文来获取 a 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();
            }
        });
    }
于 2017-04-06T13:13:42.910 回答
0

试试这个

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

private Activity mActivity;

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

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

myClipboard =(ClipboardManager)mActivity.getSystemService(CLIPBOARD_SERVICE);
于 2017-04-06T13:17:39.087 回答