我收到错误的代码和警告,不推荐使用类型ClipboardManager

时间:2014-03-21 03:30:49

标签: 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());给了我这个错误 不能在不同方法中定义的内部类中引用非final变量currentText。 和上下文无法解析为变量。这有什么不对?是O.K.在我的应用程序中使用已弃用的代码,因为我找不到任何其他可行的方法。

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

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(){}未定义

1 个答案:

答案 0 :(得分:1)

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

for (final TextView currentText : txts) {

对于context,您需要一个上下文。试试currentText.getContext()。或者,由于这显然属于Activity,因此您只需使用MyActivityClassName.this代替context

编辑:您的编辑已经结束了。在OnClickListener中,您需要在参考活动时限定this。如果您的活动类名为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();
        }
    });
}

请注意,我在调用this.时删除了getSystemService()限定符。另一种方法是使用MyActivity.this.getSystemService()