因此基本上无法理解java中'this'关键字的用法。已阅读了大约五个教程,虽然不是很好。有人可以快速解释它与以下代码的关系吗?这是一个android,它使用Button类型为b分配一个xml按钮(btn_confirm)。
Button b = (Button)this.findViewById(R.id.btn_confirm);
b.setonclickListener(this);
完整代码:
public class dic_tut2 extends Activity implements onclickListener {
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
Button b = (Button)this.findViewById(R.id.btn_confirm);
b.setonclickListener(this);
}
public void onclick(View v) {
TextView tv = (TextView)this.findViewById(R.id.tv_welcome);
EditText et = (EditText)this.findViewById(R.id.txt_name);
String text = "Hello, " + et.getText().toString() + ".\n\n";
text += "Welcome to android development. :)";
tv.setText(text);
}
}
答案 0 :(得分:0)
this
指的是您正在使用它的类的当前实例。例如:
class A {
public void f() {
A obj = this; // current instance of A
}
}
所以如果以后我创建一个A:
的实例public static void main(String[] args) {
A a = new A();
a.f(); // the 'this' inside f() is actually 'a'.
}
所以你的代码:
b.setonclickListener(this);
将按钮b的onclickListener设置为您所在班级的当前实例(您调用该方法的实例)。
修改:好的,这是一个完整的例子:
class A {
public char c;
public A(char c) { this.c = c; }
public void f() {
System.out.println(this.c);
}
}
public static void main(String[] args) {
A a = new A('a');
a.f(); // prints 'a' because 'this' inside f() is actually object 'a'.
A b = new A('b');
b.f(); // prints 'b' because 'this' inside f() is actually object 'b'.
}
答案 1 :(得分:0)
在您看到的示例中,该类很可能是一个活动类。像这样:
class MainActivity extends Activity implements OnClickListener {
@Override
protected onCreate(Bundle bundle) {
Button b = (Button)this.findViewById(R.id.btn_confirm);
b.setOnClickListener(this);
}
@Override
public onClick(View v) {
// Do something!
}
}
这是可能的,因为对象“this”既是一个可以在其View中有一个按钮的活动,它也实现了OnClickListener,它允许在单击该按钮时由该按钮调用onClick方法。这是通过向按钮的setOnClickListener函数提供对自身的引用来完成的。
答案 2 :(得分:0)
b.setonclickListener(this);
这意味着b
的点击监听器是this
:当前对象。在这种情况下,它是您的Activity
。
Activity
实施OnClickListener
,提供onclick
方法。
你基本上是在说“按钮,当你点击它时,这里是如何处理它 - 你用我自己的实现来处理它。”
它不会 为this
,它可能是实现OnClickListener
的任何内容。通过将实现保持在Activity
本地,您可以轻松访问其(Activity
)成员变量(在这种情况下您不需要)。
在onclick
处理程序中,this
引用是多余的 - 您可以在没有findViewById
的情况下访问this
方法。可以在没有限定符的情况下访问成员方法和变量。