0

Androidで3つのボタンを備えた一種の「メニュー」をプログラムし、OnClickListenersがそれぞれからの入力を記録しようとしています。ただし、奇妙な構文エラーが発生します。

ここに私の MainActivity.java があります:

package com.example.galaxydefense;

import android.os.Bundle;
import android.app.Activity;
import android.content.Intent;
import android.view.Menu;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;

public class MainActivity extends Activity {

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
}

@Override
public boolean onCreateOptionsMenu(Menu menu) {
    // Inflate the menu; this adds items to the action bar if it is present.
    getMenuInflater().inflate(R.menu.main, menu);
    return true;
}

Button buttonplay=(Button)findViewById(R.id.buttonplay);
Button buttonhelp=(Button)findViewById(R.id.buttonhelp);
Button buttoncredits=(Button)findViewById(R.id.buttoncredits);
buttonplay.setOnClickListener(new View.OnClickListener() {
    @Override
    public void onClick(View arg0) {
        // TODO Auto-generated method stub
        Thread play=new Thread() {
            @Override
            public void run() {
                try {
                    Intent play=new Intent("android.intent.action.PLAY");
                    startActivity(play);
                }
                catch(Exception e) {
                    e.printStackTrace();
                }
                finally {
                    finish();
                }
            }
        };
    }
});
buttonhelp.setOnClickListener(new View.OnClickListener() {
    @Override
    public void onClick(View arg0) {
        // TODO Auto-generated method stub
        Thread help=new Thread() {
            @Override
            public void run() {
                try {
                    Intent help=new Intent("android.intent.action.HELP");
                    startActivity(help);
                }
                catch(Exception e) {
                    e.printStackTrace();
                }
                finally {
                    finish();
                }
            }
        };
    }
}
);
buttoncredits.setOnClickListener(new View.OnClickListener() {
    @Override
    public void onClick(View arg0) {
        // TODO Auto-generated method stub
        Thread credits=new Thread() {
            @Override
            public void run() {
                try {
                    Intent credits=new Intent("android.intent.action.CREDITS");
                    startActivity(credits);
                }
                catch(Exception e) {
                    e.printStackTrace();
                }
                finally {
                    finish();
                }
            }
        };
    }
}
);
}

次のエラーが表示されます。

24 行目 - トークン "}" の構文エラー、このトークンを削除

94 行目 - 構文エラー、「}」を挿入して ClassBody を完成させます

このエラーが実際に構文エラーなのか、コンパイラによって誤って診断された別のエラーなのかはわかりません。

4

2 に答える 2

0

コードをクラス内に直接配置することはできません。代わりに、コンストラクターまたは初期化ブロックを使用してください。

MainActivity に 3 つのフィールドを定義します: (buttonPlay、buttonHelp、buttonCredits): これで問題ありません。ただし、コードを直接書くことは許可されていません。

次のように、初期化ブロック内のフィールドのにコードをラップすることで、この動作を回避できます。

{ /* This is an initializer block ... */
buttonplay.setOnClickListener(new View.OnClickListener() {
    @Override
    public void onClick(View arg0) {
        // TODO Auto-generated method stub
        Thread play=new Thread() {
            @Override
            public void run() {
                try {
                    Intent play=new Intent("android.intent.action.PLAY");
                    startActivity(play);
                }
                catch(Exception e) {
                    e.printStackTrace();
                }
                finally {
                    finish();
                }
            }
        };
    }
});
buttonhelp.setOnClickListener(new View.OnClickListener() {
    @Override
    public void onClick(View arg0) {
        // TODO Auto-generated method stub
        Thread help=new Thread() {
            @Override
            public void run() {
                try {
                    Intent help=new Intent("android.intent.action.HELP");
                    startActivity(help);
                }
                catch(Exception e) {
                    e.printStackTrace();
                }
                finally {
                    finish();
                }
            }
        };
    }
}
);
buttoncredits.setOnClickListener(new View.OnClickListener() {
    @Override
    public void onClick(View arg0) {
        // TODO Auto-generated method stub
        Thread credits=new Thread() {
            @Override
            public void run() {
                try {
                    Intent credits=new Intent("android.intent.action.CREDITS");
                    startActivity(credits);
                }
                catch(Exception e) {
                    e.printStackTrace();
                }
                finally {
                    finish();
                }
            }
        };
    }
}
);
/* Initializer block finishes here */ }
于 2013-11-05T08:21:56.237 に答える
0

関数の外にリスナーを書くことはできません。コードを次のコードに置き換えます。

package com.example.galaxydefense;

import android.os.Bundle;
import android.app.Activity;
import android.content.Intent;
import android.view.Menu;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;

public class MainActivity extends Activity {

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    Button buttonplay=(Button)findViewById(R.id.buttonplay);
    Button buttonhelp=(Button)findViewById(R.id.buttonhelp);
    Button buttoncredits=(Button)findViewById(R.id.buttoncredits);
    buttonplay.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View arg0) {
            // TODO Auto-generated method stub
            Thread play=new Thread() {
                @Override
                public void run() {
                    try {
                        Intent play=new Intent("android.intent.action.PLAY");
                        startActivity(play);
                    }
                    catch(Exception e) {
                        e.printStackTrace();
                    }
                    finally {
                        finish();
                    }
                }
            };
        }
    });
    buttonhelp.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View arg0) {
            // TODO Auto-generated method stub
            Thread help=new Thread() {
                @Override
                public void run() {
                    try {
                        Intent help=new Intent("android.intent.action.HELP");
                        startActivity(help);
                    }
                    catch(Exception e) {
                        e.printStackTrace();
                    }
                    finally {
                        finish();
                    }
                }
            };
        }
    }
    );
    buttoncredits.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View arg0) {
            // TODO Auto-generated method stub
            Thread credits=new Thread() {
                @Override
                public void run() {
                    try {
                        Intent credits=new Intent("android.intent.action.CREDITS");
                        startActivity(credits);
                    }
                    catch(Exception e) {
                        e.printStackTrace();
                    }
                    finally {
                        finish();
                    }
                }
            };
        }
    }
    );
}

@Override
public boolean onCreateOptionsMenu(Menu menu) {
    // Inflate the menu; this adds items to the action bar if it is present.
    getMenuInflater().inflate(R.menu.main, menu);
    return true;
}
}
于 2013-11-05T08:24:34.067 に答える