如何在 RecyclerView 的 Adapter class 中使用剪贴板服务
How to use Clipboard service in Adapter class of a RecyclerView
我正在制作一个 android 应用程序,我在其中使用 RecyclerView 显示文本,我想借助按钮复制 TextView 的文本。但是当我使用 getSystemService(Context.CLIPBOARD_SERVICE)
时,它给我错误 cannot resolve method
。
这是我的适配器 class,
package in.codemantri.quotes;
import android.content.ClipboardManager;
import android.content.ClipData;
import android.content.Context;
import android.content.Intent;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ImageView;
import android.widget.TextView;
import android.widget.Toast;
import androidx.annotation.NonNull;
import androidx.recyclerview.widget.RecyclerView;
public class MyAdapter extends RecyclerView.Adapter<MyAdapter.MyViewHolder> {
private String[] data;
public MyAdapter(String[] data) {
this.data=data;
}
@NonNull
@Override
public MyViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
LayoutInflater inflater=LayoutInflater.from(parent.getContext());
View view=inflater.inflate(R.layout.shayari_layout, parent, false);
return new MyViewHolder(view);
}
@Override
public void onBindViewHolder(@NonNull final MyViewHolder holder, int position) {
final String mydata=data[position];
holder.textView.setText(mydata);
holder.btnWhatsapp.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Intent whatsappIntent = new Intent();
whatsappIntent.setAction(Intent.ACTION_SEND);
whatsappIntent.putExtra(Intent.EXTRA_TEXT, mydata);
whatsappIntent.setType("text/plain");
whatsappIntent.setPackage("com.whatsapp");
try {
holder.itemView.getContext().startActivity(whatsappIntent);
}
catch (android.content.ActivityNotFoundException ex) {
}
}
});
holder.btnFacebook.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Intent facebookIntent = new Intent();
facebookIntent.setAction(Intent.ACTION_SEND);
facebookIntent.putExtra(Intent.EXTRA_TEXT, mydata);
facebookIntent.setType("text/plain");
facebookIntent.setPackage("com.facebook.katana");
try {
holder.itemView.getContext().startActivity(facebookIntent);
}
catch (android.content.ActivityNotFoundException ex) {
}
}
});
holder.btnFacebook.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Intent facebookIntentLite = new Intent();
facebookIntentLite.setAction(Intent.ACTION_SEND);
facebookIntentLite.putExtra(Intent.EXTRA_TEXT, mydata);
facebookIntentLite.setType("text/plain");
facebookIntentLite.setPackage("com.facebook.lite");
try {
holder.itemView.getContext().startActivity(facebookIntentLite);
}
catch (android.content.ActivityNotFoundException ex) {
}
}
});
// Share Button Implemantation
holder.btnShare.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Intent shareIntent=new Intent();
shareIntent.setAction(Intent.ACTION_SEND);
shareIntent.putExtra(Intent.EXTRA_TEXT, mydata);
shareIntent.setType("text/plain");
shareIntent=Intent.createChooser(shareIntent, "Share via");
holder.itemView.getContext().startActivity(shareIntent);
}
});
holder.btnCopy.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
ClipboardManager clipboardManager=getSystemService(Context.CLIPBOARD_SERVICE); //Getting Error Here
}
});
}
@Override
public int getItemCount() {
return data.length;
}
public class MyViewHolder extends RecyclerView.ViewHolder {
TextView textView;
ImageView btnWhatsapp, btnFacebook, btnShare, btnCopy;
public MyViewHolder(@NonNull View itemView) {
super(itemView);
textView=itemView.findViewById(R.id.shayari_textView);
btnWhatsapp=itemView.findViewById(R.id.btn_whatsapp);
btnFacebook=itemView.findViewById(R.id.btn_facebook);
btnShare=itemView.findViewById(R.id.btn_share);
btnCopy=itemView.findViewById(R.id.btn_copy);
}
}
}
使用剪贴板管理器
ClipboardManager clipboard = (ClipboardManager) getSystemService(Context.CLIPBOARD_SERVICE);
ClipData clip = ClipData.newPlainText(label, text);
clipboard.setPrimaryClip(clip);
在适配器 class 中,您需要从父 activity 获取上下文才能使用 getSystemService
。
您可以通过多种方式获取上下文,但我是从 recyclerview itemView
.
获取的
只需在getSystemService
前加上itemView.context
即可。
科特林代码:
val clipboard = itemView.context.getSystemService(Context.CLIPBOARD_SERVICE) as ClipboardManager
val clip: ClipData = ClipData.newPlainText("simple text", "Hello, World!")
clipboard.setPrimaryClip(clip)
这是我第一次看到没有上下文实例的 RecyclerAdapter,要遵循我的解决方案,您将需要它这里是步骤。
确保你已经创建了一个 Context 实例(作为一个字段,你应该将它作为一个参数放在你的 Recycler Adapter Construtor 中)——我通过这个解决方案将这个 Context 实例称为 contextInstance。
你的点击监听器中应该有这样的东西。
ClipboardManager 管理器 = (ClipboardManager) contextInstance.getSystemService(Context.CLIPBOARD_SERVICE);
这就是您问题的答案。现在复制数据的逻辑是这样的。
3。
ClipData clip = ClipData.newPlainText("TheLebelYouWant", myData);// myData是要Copy的数据,请教问题。
manager.setPrimaryClip(剪辑);
我正在制作一个 android 应用程序,我在其中使用 RecyclerView 显示文本,我想借助按钮复制 TextView 的文本。但是当我使用 getSystemService(Context.CLIPBOARD_SERVICE)
时,它给我错误 cannot resolve method
。
这是我的适配器 class,
package in.codemantri.quotes;
import android.content.ClipboardManager;
import android.content.ClipData;
import android.content.Context;
import android.content.Intent;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ImageView;
import android.widget.TextView;
import android.widget.Toast;
import androidx.annotation.NonNull;
import androidx.recyclerview.widget.RecyclerView;
public class MyAdapter extends RecyclerView.Adapter<MyAdapter.MyViewHolder> {
private String[] data;
public MyAdapter(String[] data) {
this.data=data;
}
@NonNull
@Override
public MyViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
LayoutInflater inflater=LayoutInflater.from(parent.getContext());
View view=inflater.inflate(R.layout.shayari_layout, parent, false);
return new MyViewHolder(view);
}
@Override
public void onBindViewHolder(@NonNull final MyViewHolder holder, int position) {
final String mydata=data[position];
holder.textView.setText(mydata);
holder.btnWhatsapp.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Intent whatsappIntent = new Intent();
whatsappIntent.setAction(Intent.ACTION_SEND);
whatsappIntent.putExtra(Intent.EXTRA_TEXT, mydata);
whatsappIntent.setType("text/plain");
whatsappIntent.setPackage("com.whatsapp");
try {
holder.itemView.getContext().startActivity(whatsappIntent);
}
catch (android.content.ActivityNotFoundException ex) {
}
}
});
holder.btnFacebook.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Intent facebookIntent = new Intent();
facebookIntent.setAction(Intent.ACTION_SEND);
facebookIntent.putExtra(Intent.EXTRA_TEXT, mydata);
facebookIntent.setType("text/plain");
facebookIntent.setPackage("com.facebook.katana");
try {
holder.itemView.getContext().startActivity(facebookIntent);
}
catch (android.content.ActivityNotFoundException ex) {
}
}
});
holder.btnFacebook.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Intent facebookIntentLite = new Intent();
facebookIntentLite.setAction(Intent.ACTION_SEND);
facebookIntentLite.putExtra(Intent.EXTRA_TEXT, mydata);
facebookIntentLite.setType("text/plain");
facebookIntentLite.setPackage("com.facebook.lite");
try {
holder.itemView.getContext().startActivity(facebookIntentLite);
}
catch (android.content.ActivityNotFoundException ex) {
}
}
});
// Share Button Implemantation
holder.btnShare.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Intent shareIntent=new Intent();
shareIntent.setAction(Intent.ACTION_SEND);
shareIntent.putExtra(Intent.EXTRA_TEXT, mydata);
shareIntent.setType("text/plain");
shareIntent=Intent.createChooser(shareIntent, "Share via");
holder.itemView.getContext().startActivity(shareIntent);
}
});
holder.btnCopy.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
ClipboardManager clipboardManager=getSystemService(Context.CLIPBOARD_SERVICE); //Getting Error Here
}
});
}
@Override
public int getItemCount() {
return data.length;
}
public class MyViewHolder extends RecyclerView.ViewHolder {
TextView textView;
ImageView btnWhatsapp, btnFacebook, btnShare, btnCopy;
public MyViewHolder(@NonNull View itemView) {
super(itemView);
textView=itemView.findViewById(R.id.shayari_textView);
btnWhatsapp=itemView.findViewById(R.id.btn_whatsapp);
btnFacebook=itemView.findViewById(R.id.btn_facebook);
btnShare=itemView.findViewById(R.id.btn_share);
btnCopy=itemView.findViewById(R.id.btn_copy);
}
}
}
使用剪贴板管理器
ClipboardManager clipboard = (ClipboardManager) getSystemService(Context.CLIPBOARD_SERVICE);
ClipData clip = ClipData.newPlainText(label, text);
clipboard.setPrimaryClip(clip);
在适配器 class 中,您需要从父 activity 获取上下文才能使用 getSystemService
。
您可以通过多种方式获取上下文,但我是从 recyclerview itemView
.
只需在getSystemService
前加上itemView.context
即可。
科特林代码:
val clipboard = itemView.context.getSystemService(Context.CLIPBOARD_SERVICE) as ClipboardManager
val clip: ClipData = ClipData.newPlainText("simple text", "Hello, World!")
clipboard.setPrimaryClip(clip)
这是我第一次看到没有上下文实例的 RecyclerAdapter,要遵循我的解决方案,您将需要它这里是步骤。
确保你已经创建了一个 Context 实例(作为一个字段,你应该将它作为一个参数放在你的 Recycler Adapter Construtor 中)——我通过这个解决方案将这个 Context 实例称为 contextInstance。
你的点击监听器中应该有这样的东西。 ClipboardManager 管理器 = (ClipboardManager) contextInstance.getSystemService(Context.CLIPBOARD_SERVICE);
这就是您问题的答案。现在复制数据的逻辑是这样的。
3。 ClipData clip = ClipData.newPlainText("TheLebelYouWant", myData);// myData是要Copy的数据,请教问题。 manager.setPrimaryClip(剪辑);