Android中的控件是否不能在该活动中公开访问?

时间:2013-04-01 12:11:53

标签: android android-edittext

android中的控件是否在该活动(.java文件)中无法公开访问

这里的edittext字段 txt1 - 我想在函数 public void clr()

中访问它

我该怎么办?是可能还是做错了什么?

这可能是一个非常基本的qn。但我对Java& Android - 虽然在C#中经验丰富。 Pl帮助

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函数。但我想知道上面提到的是否可行。

6 个答案:

答案 0 :(得分:1)

您应该在类级别声明EditText字段,然后在clr()方法中显示变量txt1。

答案 1 :(得分:1)

C#开发人员首先感觉难以理解的是控件。 Visual Studio为设计人员提供了控件,当您将控件放在表单上时,它会自动创建相应类的实例并使其可访问。它创建了一个部分类,在将代码组合后,创建一个完整的类。

使用android,你有责任创建变量,因为它不会自己创建变量。设计师只是一个屏幕布局,您无法访问它。执行此操作的标准方法是创建一个类型的变量,然后在类中访问,然后使用findbyid分配控件以访问该控件。

您定义的变量可以有自己的范围。因此,如果您可以在课堂上访问它,那么它应该不是问题。

答案 2 :(得分:1)

在Class级别声明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);
            }
     }

答案 3 :(得分:0)

如果您不是编程新手,那么您应该知道必须在该类中将变量声明为全局变量才能在任何方法中访问它。您应该在class.inx中声明它,但在任何特定方法之外。

答案 4 :(得分: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();

}

答案 5 :(得分:0)

我猜你的代码中的错误是因为

在方法内声明的最终变量的范围仅在方法内。 它不能在方法之外访问。在方法返回后,最终的局部变量确实被破坏了......

所以你必须制作类级别的edittext变量......

请注意这就是为什么你不能访问这里

 public void clr(){

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

    res.setText("");

    txt1.requestFocus();

}