Быстрый «этот» запрос ключевого слова - помощь оценена - PullRequest
0 голосов
/ 27 ноября 2011

Так что, по сути, возникают проблемы с пониманием использования ключевого слова this в Java. Прочитал около пяти уроков, хотя и не очень хороших. Может ли кто-нибудь быстро объяснить, как он используется по отношению к следующему коду? Это андроид, он назначает кнопку xml (btn_confirm) для b с типом кнопки.

   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);

}

}

Ответы [ 3 ]

0 голосов
/ 27 ноября 2011

В примерах, которые вы видели, класс, скорее всего, является классом деятельности. Примерно так:

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 кнопки.

0 голосов
/ 27 ноября 2011
b.setonclickListener(this);

Это означает, что прослушиватель щелчков для b равен this: текущий объект.В этом случае это ваш Activity.

Activity реализует OnClickListener, который обеспечивает метод onclick.

Вы в основном говорите: «Кнопка, когда вы нажали, вот как с этим справиться…вы справляетесь с реализацией, содержащейся внутри меня. "

Это не будет иметь , чтобы быть this, это может быть что-нибудь, что реализовало OnClickListener.Сохраняя реализацию локально для Activity, вы обеспечиваете легкий доступ к ее (Activity) переменным-членам (которые вам не нужны в этом случае).

Внутри обработчика onclickссылки this излишни - вы можете получить доступ к методам findViewById без this.Методы-члены и переменные доступны без квалификатора.

0 голосов
/ 27 ноября 2011

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);

Устанавливает onclickListener кнопки b в текущий экземпляр (экземпляр, из которого вы вызвали метод) класса, в котором вы находитесь.

Редактировать : Хорошо, вот полный пример:

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'.      
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...