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 回答