簡體   English   中英

快速的“ this”關鍵字查詢-有用的幫助

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM