getSystemService()不适用于Adapter Class

时间:2017-04-06 13:11:14

标签: java android android-adapter android-context clipboardmanager

我试图将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 个答案:

答案 0 :(得分:2)

适配器不具备自己的存在。适用于活动。因此,如果要调用该类型服务或其他活动,则必须传递使用此适配器的该活动的上下文。所以用context

打电话

<强>像

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

答案 1 :(得分:1)

为了做到这一点,您需要Context。执行:

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

答案 2 :(得分:0)

您必须使用上下文来获取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();
            }
        });
    }

答案 3 :(得分:0)

尝试这个

在Adapter类中:添加此构造函数

private Activity mActivity;

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

然后通过此mActivity变量

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