[英]Quick 'this' Keyword Query - Help Appreicated
因此,基本上很難理解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);
}
}
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'.
}
在您看到的示例中,該類很可能是活動類。 像這樣:
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
:當前對象。 在這種情況下,這是您的Activity
。
該Activity
實現了OnClickListener
,它提供了onclick
方法。
您基本上是在說“按鈕,當您單擊按鈕時,這里是處理它的方法-您可以使用自己內部包含的實現來處理它。”
它不會是this
,它可能是任何東西,實現OnClickListener
。 通過將實現保留在Activity
本地,您可以輕松訪問其( Activity
的)成員變量(在這種情況下不需要使用)。
在onclick
處理程序中, this
引用是多余的-您可以在沒有this
情況下訪問findViewById
方法。 無需限定符即可訪問成員方法和變量。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.