0

Android のコントロールは、そのアクティビティ (.java ファイル) 内でパブリックにアクセスできませんか?

ここで edittext フィールドtxt1 - 関数public void clr()でアクセスしたい

どうすればいいですか?それは可能ですか、それとも何か間違っていますか?

これは非常に基本的な qn かもしれません。しかし、私は Java と Android にはまったく慣れていません - C# の経験はありますが。助けてください

public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        final TextView res=(TextView)findViewById(R.id.textView1);

        final EditText txt1 =(EditText) findViewById(R.id.editText1);
        final EditText txt2 =(EditText) findViewById(R.id.editText2);

        Button btn = (Button) findViewById(R.id.button1);
        btn.setOnClickListener(new OnClickListener() {

            public void onClick(View v) {
                // TODO Auto-generated method stub

            //Some code here

            }
        });

        Button btnClr=(Button) findViewById(R.id.button2);
        btnClr.setOnClickListener(new OnClickListener() {

            @Override
            public void onClick(View v) {
                // TODO Auto-generated method stub

                txt1.setText("");
                txt2.setText("");

                res.setText("");

                txt1.requestFocus();

            }
        });


    }


    public void clr(){

        txt1.setText("");
        txt2.setText("");

        res.setText("");

        txt1.requestFocus();

    }

txt1、txt2 を引数として clr 関数に渡すことができることはわかっています。しかし、上記のことが可能かどうかを知りたいです。

4

6 に答える 6

1

クラス レベルで EditText フィールドを宣言する必要があります。そうすれば、変数 txt1 が clr() メソッドで表示されます。

于 2013-04-01T12:14:42.360 に答える
1

C# 開発者が Android で理解するのが難しいと最初に感じるのは、コントロールです。Visual Studio は、コントロールを配置するためのデザイナーを提供します。フォームにコントロールを配置すると、それぞれのクラスのインスタンスが自動的に作成され、アクセス可能になります。コードビハインドを結合した後に完全なクラスを作成する部分クラスを作成します。

Android では、それ自体では変数を作成しないため、変数を作成するのはユーザーの責任です。デザイナは単なる画面レイアウトであり、アクセスすることはできません。これを行う標準的な方法は、クラスでアクセスしたいタイプの変数を作成し、findbyid を使用してそのコントロールにアクセスすることでコントロールを割り当てることです。

定義した変数は、独自のスコープを持つことができます。したがって、クラス全体でアクセスできるようにすれば、問題にはなりません。

于 2013-04-01T12:16:45.447 に答える
1

クラス レベルで EditText を宣言します。

     Class MyClass extends Activity {

     final EditText txt1;

         public void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_main);
            txt1 =(EditText) findViewById(R.id.editText1);
            }
     }
于 2013-04-01T12:17:44.653 に答える
0

プログラミングに慣れていない場合は、任意のメソッドで変数にアクセスするには、そのクラス内で変数をグローバルとして宣言する必要があることを知っておく必要があります.クラス内で宣言する必要がありますが、特定のメソッドの外側.

于 2013-04-01T12:16:00.190 に答える
0

次のことを試してください。

TextView res;
EditText txt1;
EditText txt2;

public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    res=(TextView)findViewById(R.id.textView1);

    txt1 =(EditText) findViewById(R.id.editText1);
    txt2 =(EditText) findViewById(R.id.editText2);

    Button btn = (Button) findViewById(R.id.button1);
    btn.setOnClickListener(new OnClickListener() {

        public void onClick(View v) {
            // TODO Auto-generated method stub

        //Some code here

        }
    });

    Button btnClr=(Button) findViewById(R.id.button2);
    btnClr.setOnClickListener(new OnClickListener() {

        @Override
        public void onClick(View v) {
            // TODO Auto-generated method stub

            clr();

        }
    });


}


public void clr(){

    txt1.setText("");
    txt2.setText("");

    res.setText("");

    txt1.requestFocus();

}
于 2013-04-01T12:16:07.847 に答える
0

あなたのコードのエラーは、

メソッド内で宣言された最終変数のスコープは、メソッド内のみです。メソッドの外からアクセスすることはできません。最終的なローカル変数は、メソッドが返された後に実際に破棄されます...

そのため、クラスレベルの edittext 変数を作成する必要があります...

ここにアクセスできない理由がわかります

 public void clr(){

    txt1.setText("");
    txt2.setText("");

    res.setText("");

    txt1.requestFocus();

}
于 2013-04-01T12:23:02.470 に答える