Метод Android onClick

У меня есть два метода onclick в проекте Android.

    clr=(Button)findViewById(R.id.Button01);
    clr.setOnClickListener(new OnClickListener() {

        public void onClick(View v) {

            tv1.setText("CLR");

            et1.setText("");
            refrigerant = "";
            pres = "";
            temperature = "";

            superheat_oda = 0;
            sub_cool = 0;
}
    });

И у меня есть другой метод onClick, в котором я должен вызывать этот метод напрямую.

    prs=(Button)findViewById(R.id.Button02);
    prs.setOnClickListener(new OnClickListener() {


                     -----      I have to call that method---

                                                 }
    });

Есть ли решение для этого?


person bindal    schedule 17.09.2010    source источник
comment
Я предлагаю вам последовать предложению benvd, но все же ради этого используйте clr.performClick() в Listener.   -  person st0le    schedule 17.09.2010


Ответы (4)


Вы хотите позвонить первому onClick из второго? Просто извлеките содержимое вашего первого onClick в отдельный метод и вызовите этот метод из каждого onClick.

Изменить: согласно комментарию st0le, вы можете делать то, что хотите, позвонив clr.performClick(). (Не знал этого.) Тем не менее, извлечение его в отдельный метод кажется более чистым.

person benvd    schedule 17.09.2010

вы можете сделать что-то подобное в файле XML

<Button
 android:layout_height="wrap_content"
 android:layout_width="wrap_content"
 android:onClick="some_function" />

и поместите эту функцию в файл Java

public void some_function(View view) {
 // stuff...
}

и поместите some_function в оба "onClick"

person Ibraheem Saoud    schedule 11.05.2014
comment
Параметр функции (View view) — это ошибка. Спасибо! - person Joshua Pinter; 13.11.2016

Вы должны использовать самый простой способ, который я всегда делаю, как показано ниже:

@Override
public void onCreate(Bundle savedInstanceState) {
        button1.setOnClickListener(onClickListener);
        button2.setOnClickListener(onClickListener);

}

private OnClickListener onClickListener = new OnClickListener() {

    @Override
    public void onClick(final View v) {
             switch(v.getId()){
                 case R.id.button1:
                      //DO something
                 break;
                 case R.id.button2:
                      //DO something
                 break;
              }

    }
};
person Nguyen Minh Binh    schedule 03.04.2012
comment
предложение кнопки было бы сломать каждый случай. это сделало бы его более эффективным. - person Chief Madog; 03.07.2016

Я бы рекомендовал использовать один и тот же OnClickListener для обеих кнопок, если обе кнопки действительно должны делать одно и то же:

OnClickListener l=new OnClickListener() {

    public void onClick(View v) {

        tv1.setText("CLR");

        et1.setText("");
        refrigerant = "";
        pres = "";
        temperature = "";

        superheat_oda = 0;
        sub_cool = 0;
    }
};
clr=(Button)findViewById(R.id.Button01);
clr.setOnClickListener(l);
prs=(Button)findViewById(R.id.Button02);
prs.setOnClickListener(l);

или, если это не совсем то же самое, вы можете получить доступ к методу прослушивателя с помощью l.onClick(null); вручную..

person Simon    schedule 17.09.2010