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