Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/223.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java Android Final vs Private文本视图_Java_Android_Final - Fatal编程技术网

Java Android Final vs Private文本视图

Java Android Final vs Private文本视图,java,android,final,Java,Android,Final,简单的也许是愚蠢的问题。我有一个登录活动,它会启动另一个活动,下面是代码: public class LoginActivity extends Activity { @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.login); ActionBar actionBar = get

简单的也许是愚蠢的问题。我有一个登录活动,它会启动另一个活动,下面是代码:

public class LoginActivity extends Activity {

@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.login);
    ActionBar actionBar = getActionBar();
    actionBar.hide();

    Button btnLogin = (Button) findViewById(R.id.btnLogin);
    final TextView tvUsername = (TextView) findViewById(R.id.tvUsername);
    final TextView tvPassword = (TextView) findViewById(R.id.tvPassword);

    btnLogin.setOnClickListener(new View.OnClickListener() {

        @Override
        public void onClick(View v) {
            if (tvUsername.getText().toString().length()<1) {
                Toast msg = Toast.makeText(LoginActivity.this, "Enter a Username", Toast.LENGTH_LONG);
                msg.setGravity(Gravity.TOP|Gravity.LEFT, 0, 70);
                msg.show();
                tvUsername.requestFocus();
            } else if (tvPassword.getText().toString().length()<1) {
                Toast msg = Toast.makeText(LoginActivity.this, "Enter a Password", Toast.LENGTH_LONG);
                msg.setGravity(Gravity.TOP|Gravity.LEFT, 0, 200);
                msg.show();
                tvPassword.requestFocus();
            } else {
                startActivity(new Intent(LoginActivity.this,CrewScheduleActivity.class));
                finish();
            }
        }
    });
    }
}
公共类LoginActivity扩展活动{
@凌驾
创建时的公共void(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.login);
ActionBar ActionBar=getActionBar();
actionBar.hide();
按钮btnLogin=(按钮)findViewById(R.id.btnLogin);
最终文本视图tvUsername=(文本视图)findViewById(R.id.tvUsername);
最终文本视图tvPassword=(文本视图)findViewById(R.id.tvPassword);
btnLogin.setOnClickListener(新视图.OnClickListener(){
@凌驾
公共void onClick(视图v){
if(tvUsername.getText().toString().length()这与此有关。基本上,当您使用匿名类时,其中使用的值(而不是对象本身)会复制到该类以供使用。因此,在类中返回或修改这些变量没有意义,因此它们必须是
final

但是,如果变量是包含匿名类的类的一部分,那就不同了。基本上,您的内部类引用了
LoginActivity
对象(作为
LoginActivity.this
),并且可以使用和修改其成员和方法

当你把它们放在@Override之上时,你使它们成为
LoginActivity
类的成员变量。因此,它们可以被匿名类访问

简而言之,区别在于:
final
变量是方法的局部变量,并复制到匿名类;成员变量是包含类的局部变量,并由匿名类修改


如果以后要重用匿名类中的数据,请使用成员变量。如果只在
onCreate()
和匿名类中需要它,则在声明TextView字段(或与此相关的任何字段)时,一个
final
变量就足够了。

作为public,它可以被任何其他类直接访问,我认为这不是您的意图;没有理由将TextView变量公开。
如果将它设置为private,则可以保证它的值不会在另一个类中被重写,这就是final关键字最初的设计目的。因此,只需将它设置为private,您就不必担心Eclipse会纠正您的错误。
总之,将字段设为private/final可以确保该值不能从另一个类重写,这是一个很好的设计。


希望这篇漫无边际的文章能有所帮助。如果没有,我会很高兴更好地澄清它。

好的,我现在明白了。我完全没有意识到公共void onClick(视图五)HeHe是另一个班里的一个匿名类。我想我现在将把它们保存到最后。下一步是使用登录到WCF Web服务的值,如果我需要它们作为私有的话,我会这样做。没问题;我们很乐意帮助;如果答案是有用的,考虑一下也要投票。谢谢。不是匿名类;它是匿名类中的一个重写方法。谢谢,我想它说需要15个声誉,我们必须弄清楚这个代表的东西。也经常来这里帮助回答其他人的问题;这真的有助于你的声誉,以及你的知识。尽可能查看。要添加一些内容,封闭块中声明的最终字段保证完全构造并对其他线程可见。好的,还有一件事有点让人困惑。我只是想看看我是否正确理解了这一点。1.LoginActivity由于extends关键字而从Activity类继承。2.public Void OnCreate覆盖了on创建活动类的方法。3.公共的void OnClick重写?我有点搞不懂为什么会有重写,因为我像这里的VBA一样思考,OnClick不需要重写任何东西。它实现了一个
OnClickListener
。如果你看看
OnClickListener
类,你会注意到有一个
OnClick方法;您正在重写它,即使它不是一个显式声明的
实现
类。是的,您的其他观点是正确的。哦,该死的,我没有意识到OnClickListener是一个类,啊,有很多阅读要做。再次感谢