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

エクリプスを使用していますか?その場合、クイック フィックス メニューを使用すると、非最終変数やインポート ステートメントの欠落などの問題を解決するのに役立ちます。

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

Windows では、カーソルをエラーの上に置き、Ctrl+1 を押してクイック修正メニューを開きます。Enter キーを押すと、(通常は) エラーは問題なく解決されます。

于 2013-10-26T12:10:08.120 に答える
0

以下のように、ボタン変数を「最終」として設定する必要があります

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

そのため、button1 と button2 を再初期化することはできません。

于 2013-10-26T12:00:41.620 に答える
0

問題を解決するには 2 つの方法があります。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 に答える