4

私はこれを onCreate に持っています:

final TextView text1 = (TextView) findViewById(R.id.txtNextAlarm);

そして、同じクラスにあるメソッドにテキストを設定しようとしています:

public static void NextTxt(){
        text1.setText("");
}

しかし、それは「text1」を認識しません。

4

5 に答える 5

7

問題は、静的メソッドが特定のオブジェクトではなく、クラス全体に関連付けられていることです。そのため、クラス内の静的フィールドのみを表示できます。あなたのtext1言うことが真実なら、あなたの変数はそれでもありません。onCreate()代わりに、メソッドの長さに対してのみ存在するローカル変数です。アクティビティのインスタンスが1つしかないことがわかっている場合(これはおそらく不合理な仮定ではありません)、できることは次のとおりです。

private static TextView text1;

クラスの最上位(または、基本的に、メソッドの外部)。モディファイアはfinalあなたに何も買わない。公開するか非公開にするかはあなたが選択しますが、私はデフォルトで非公開にする傾向があります(他に理由がない限り)。

別の方法は、なぜNextTxt()静的であるかを自問することです。通常のインスタンスメソッドにする場合でもtext1、クラスで宣言する必要がありますが、静的である必要はありません。ただし、それを呼び出すにはインスタンスが必要です。

于 2013-02-20T22:37:44.797 に答える
3
TextView text1;

@Override
    public void onCreate(Bundle savedInstanceState) {
      super.onCreate(savedInstanceState);
      text1 = (TextView) findViewById(R.id.txtNextAlarm);
}

onCreate メソッドで初期化を行います。

于 2013-02-20T22:29:12.667 に答える
1

メソッドが静的である場合、クラスの非静的フィールドにはアクセスできません。textFieldを静的にするか、パラメーターとして渡す必要があります。

static TextView text1;

@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    MyClass.text1 = (TextView) findViewById(R.id.txtNextAlarm);
}

public static void NextTxt(){
    MyClass.text1.setText("");
}

もちろん、textFieldはクラスの静的フィールドであるため、一度に1つしか設定できません。他のオプションには、シングルトンの作成やNextTxtメソッドからの静的修飾子の削除が含まれます。

于 2013-02-20T22:39:30.033 に答える
1

この行が onCreate メソッドにあることが本当なら

final TextView text1 = (TextView) findViewById(R.id.txtNextAlarm);

あなたの質問に対する答えは、 text1 が NextTxt メソッド内の範囲外であるということです。あるメソッド内で変数を宣言して初期化し、別のメソッドからその変数にアクセスしようとしています。NextTxt メソッドが text1 を「見る」ためには、そのメンバーを両方のメソッドがアクセスできる場所に移動する必要があります。

他の回答で述べたように、onCreate はインスタンス メソッドであり、NextTxt は静的メソッドであるという事実にも対処しています。問題を「修正」するために、すべてを静的にし始めたくなるかもしれませんが、これは危険でずさんな方法です。Android が UI を強制終了するタイミングを制御できないため、text1 が警告なしで無効になる可能性があります。次にメソッドを呼び出そうとすると、結果が気に入らないでしょう。

何をしようとしているのかを再考し、必要に応じてそれをスケッチし、エラーを理解していない場合は Eclipse で簡単な修正を適用しないでください。

于 2013-02-20T22:58:56.703 に答える
-2

text1 は、localクラスの属性として宣言する必要がある変数です

public final TextView text1;

@Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
      text1 = (TextView) findViewById(R.id.txtNextAlarm);
}

静的メソッドで次を使用します。

public static void NextTxt(){
        text1.setText("");
}
于 2013-02-20T22:34:12.167 に答える