android - 我收到以下代码的错误并警告 ClipboardManager 类型已弃用

标签 android

for (TextView currentText : txts) {
        currentText.setTextSize(heightText);
        currentText.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                ClipboardManager cm = (ClipboardManager)context.getSystemService(Context.CLIPBOARD_SERVICE);
                cm.setText(currentText.getText());
                Toast.makeText(context, "Copied to clipboard", Toast.LENGTH_SHORT).show();
            }
            });
    }

我已将以上代码放入我的 onCreate 方法中,我的应用程序需要在 API 8+ 上运行。 cm.setText(currentText.getText()); 给我这个错误 无法在不同方法中定义的内部类中引用非最终变量 currentText。 并且上下文无法解析为变量。这里有什么问题?可以吗?在我的应用程序中使用已弃用的代码,因为我找不到任何其他可行的方法。

[编辑] 现在我的代码是这样的:

for (final TextView currentText : txts) {
        currentText.setTextSize(heightText);
        currentText.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                ClipboardManager cm = (ClipboardManager)this.getSystemService(Context.CLIPBOARD_SERVICE);
                cm.setText(currentText.getText());
                Toast.makeText(this, "Copied to clipboard", Toast.LENGTH_SHORT).show();
            }
            });

错误是 Toast 类型中的方法 makeText(Context, CharSequence, int) 不适用于参数 (new View.OnClickListener(){}, String, int) getSystemService(String) 方法未定义类型 new View.OnClickListener(){}

最佳答案

尝试在 for 循环中声明变量 final:

for (final TextView currentText : txts) {

至于context,你需要一个context。试试 currentText.getContext()。或者,由于这显然在 Activity 中,您可以简单地使用 MyActivityClassName.this 而不是 context

编辑:您已完成编辑。在 OnClickListener 中,您需要在要引用 Activity 时限定 this。如果您的 Activity 类名为 MyActivity,则应该可以使用如下代码:

for (final TextView currentText : txts) {
    currentText.setTextSize(heightText);
    currentText.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {
            ClipboardManager cm = (ClipboardManager)getSystemService(Context.CLIPBOARD_SERVICE);
            cm.setText(currentText.getText());
            Toast.makeText(MyActivity.this, "Copied to clipboard", Toast.LENGTH_SHORT).show();
        }
    });
}

请注意,我在调用 getSystemService() 时去掉了 this. 限定符。替代方案是使用 MyActivity.this.getSystemService()

关于android - 我收到以下代码的错误并警告 ClipboardManager 类型已弃用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22549594/

相关文章:

java - 如何修复 "More than one file was found with OS independent path ' project.properties'"Android Studio 3.0 Beta-6 中的错误

android - 如何使用 Malloc Debug 检查 native 内存泄漏?

Android - LazyAdapter 重叠 View

android - SVG 图像在具有相同代码的 android 3.0+ 中不可见

android - phonegap 地理定位不起作用

Android Canvas 硬件加速

android - 所有 gms/firebase 库必须使用完全相同的版本

android - 多个匹配语句时 Espresso 测试失败,但使用较小的匹配语句通过

android - Windows 8.1 64 位上的 PhoneGap 使用 Platform add android 命令出现错误

android - Xamarin,Android : ImageView. SetColorFilter() 对我的 ImageView 没有任何影响?