Java 快速';这';关键字查询-通知帮助
因此,在理解java中“this”关键字的用法时,基本上遇到了困难。已经阅读了大约五篇教程,尽管不是很好。有人能快速解释一下它是如何与下面的代码相关联地使用的吗?这是一个安卓系统,它将一个xml按钮(btn_确认)分配给按钮类型为的bJava 快速';这';关键字查询-通知帮助,java,android,keyword,Java,Android,Keyword,因此,在理解java中“this”关键字的用法时,基本上遇到了困难。已经阅读了大约五篇教程,尽管不是很好。有人能快速解释一下它是如何与下面的代码相关联地使用的吗?这是一个安卓系统,它将一个xml按钮(btn_确认)分配给按钮类型为的b Button b = (Button)this.findViewById(R.id.btn_confirm); b.setonclickListener(this); 完整代码: public class dic_tut2 extends Activit
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);
}
}
此
引用您在其中使用它的类的当前实例。例如:
class A {
public void f() {
A obj = this; // current instance of 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'.
}
在您看到的示例中,该类很可能是活动类。大概是这样的:
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”既是一个在其视图中可以有按钮的活动,也是一个实现OnClickListener的活动,它允许在单击该按钮时由该按钮调用其onClick方法。这是通过向按钮的setOnClickListener函数提供对自身的引用来实现的
b.setonclickListener(this);
这意味着b
的单击侦听器是This
:当前对象。在本例中,这是您的活动
活动
实现了onclick监听器
,它提供了onclick
方法
你基本上是在说“按钮,当你被点击时,这里是如何处理它——你用我自己的实现来处理它。”
它不必是这个
,它可以是实现OnClickListener
的任何东西。通过将实现保持在活动
的本地,可以方便地访问其(活动的)成员变量(在本例中不需要)
在
onclick
处理程序中,this
引用是多余的——您可以在不使用this
的情况下访问findViewById
方法。成员方法和变量可以在没有限定符的情况下访问。已经读了两遍,对于我发布的两行代码,或者对于它本身,都没有任何意义。感谢您的回复。可能重复的嘿!Android应用程序中没有main!;)好的,这不是相关的,这只是一个例子。它可以是任何方法。这也被标记为Java btw。感谢您的回复。我的主要问题是我不明白为什么需要它。您使用了this关键字,但我真的看不出它有什么作用。我真的很抱歉,这完全没有意义。@user1068042:我们好好想想。您的侦听器必须是当前类的实例,对吗?如果不使用“this”,则必须自己创建一个新实例,并将其设置为侦听器。但是有了“this”,你可以只设置当前对象。但是当前对象是什么?声明(b.setonClickListener(this);),我不确定它是做什么的,它指的是什么“this”。我已经更新了我的原始帖子,我理解“this.findviewbyd”,因为没有“this”,我们每次使用它时都需要创建a.findviewbyd、b.fiendViewByID等。我的想法正确吗?再次感谢。谢谢你的解释。我不明白为什么在b.setOnClickListener中没有使用onClick方法,也不明白“this”如何引用onClick。我在这里的想法正确吗?或者我在代码如何工作方面有问题吗?两种方法都可以。通过在函数外部使用它,可以更轻松地操作onClick函数中的活动。这种方法的缺点是,如果您想在活动中使用多个按钮,则每次都需要检查哪个按钮调用了onClick函数。如果我们在b.setOnClickListener中使用'this'关键字而不是'onClick',您是指最后一句话吗,如果有多个按钮,我们需要检查哪个函数调用了它?例如,如果我们有b.setOnClickListener(这个)和c.setOnClickListener(这个)?还是我误解了你的意思?还有两件事还不确定,1)“this”在代码中是如何指onClick方法的,2)您在上一次回答中的第二句话是什么意思。抱歉,我真的很感谢你的帮助。是的,这就是我的意思。对于第一个问题:它指的是onClick()方法,因为当在onCreate()中使用“this”时,它指的是当前对象,它只能是MainActivity的对象,因为onCreate()在MainActivity中。