1

安卓新手。我应该编辑什么来摆脱一个奇怪的“不能引用以不同方法定义的内部类中的非最终变量按钮?

@Override
    public void onCreate(Bundle SavedInstanceState) {
        super.onCreate(SavedInstanceState);
        setContentView(R.layout.activity_main);
        Button button1 = (Button)findViewById(R.id.button1);
        Button button2 = (Button)findViewById(R.id.button2);
        //Listeneři
        button1.setOnClickListener(new OnClickListener() {
            @Override
            public void onClick(View v) {
                button1.setText("ok");
4

6 回答 6

3

改成这个。。

 final Button button1 = (Button)findViewById(R.id.button2);
    //Listeneři
    button1.setOnClickListener(new OnClickListener() {
        @Override
        public void onClick(View v) {
            button1.setText("ok");

或者

您可以将按钮变量引用声明为全局..

于 2013-10-26T11:58:52.817 回答
2

你正在做的事情是不可能的。

JLS #第8章

任何使用但未在内部类中声明的局部变量、形参或异常参数都必须声明为 final。

任何使用但未在内部类中声明的局部变量必须在内部类的主体之前明确分配(第 16 节)。

使该变量像final 以前一样在 中使用innerclass,这样您就可以获得使用它的权限。

final Button button1 = (Button)findViewById(R.id.button2);

final同样明智的是,如果您在侦听器中使用它们,也请留下。

于 2013-10-26T12:02:21.990 回答
0

您需要将按钮变量设置为“最终”,如下所示

final Button button1 = (Button)findViewById(R.id.button1);
final Button button2 = (Button)findViewById(R.id.button2);

因此,按钮 1 和按钮 2 无法重新初始化。

于 2013-10-26T12:00:41.620 回答
0

尝试这个...

 @Override
 public void onCreate(Bundle SavedInstanceState) {
    super.onCreate(SavedInstanceState);
    setContentView(R.layout.activity_main);
    Button button1 = (Button)findViewById(R.id.button1);
    Button button2 = (Button)findViewById(R.id.button2);
    //Listeneři
    button1.setOnClickListener(new OnClickListener() {
        @Override
        public void onClick(View v) {
            Button button = (Button)v;
            button.setText("ok");
        }
    }

也不需要将变量设为最终变量......

于 2013-10-26T12:05:53.550 回答
0

你在使用 Eclipse 吗?如果是这样,使用快速修复菜单将帮助您解决诸如非最终变量和缺少导入语句等问题。

http://help.eclipse.org/juno/index.jsp?topic=%2Forg.eclipse.jdt.doc.user%2Fconcepts%2Fconcept-quickfix-assist.htm

在 Windows 上,将光标放在错误上并按 Ctrl+1 打开快速修复菜单。按回车键(通常)会令人满意地解决错误。

于 2013-10-26T12:10:08.120 回答
0

你有两种解决问题的方法,1.改变 Button button1 = (Button)findViewById(R.id.button1);

final Button button1 = (Button)findViewById(R.id.button1);

2.从函数中定义button1。像这样:

public class MainActivity extends Activity
{
    Button button1 = (Button)findViewById(R.id.button1);
    Button button2 = (Button)findViewById(R.id.button2);
@Override
public void onCreate(Bundle SavedInstanceState) {
    super.onCreate(SavedInstanceState);
    setContentView(R.layout.activity_main);

    //Listeneři
    button1.setOnClickListener(new OnClickListener() {
        @Override
        public void onClick(View v) {
            button1.setText("ok");
于 2013-10-26T12:26:26.583 回答