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