2010-09-17 7 views
7

ich in android Projekt zwei Onclick Methode habenAndroid onClick Methode

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

Und ich habe onther onClick Verfahren, in dem ich direkt die Methode aufrufen müssen

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


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

               } 
    }); 

Gibt es für diese eine Lösung?

+3

Ich schlage vor, Sie folgen 'benvd' Vorschlag, aber immer noch aus Gründen, verwenden' clr.performClick() 'im Listener. – st0le

Antwort

14

Sie möchten die erste onClick von der Sekunde anrufen? Extrahieren Sie einfach den Inhalt Ihres ersten onClick in einer separaten Methode und rufen Sie diese Methode von jedem onClick.

Edit: Laut St0les Kommentar können Sie tun, was Sie wollen, indem Sie clr.performClick() aufrufen. (Wusste das nicht.) Trotzdem scheint es sauberer zu sein, es in eine separate Methode zu extrahieren.

1

Ich würde empfehlen, den gleichen OnClickListener für beiden Tasten zu verwenden, wenn beide Tasten wirklich die gleiche Sache zu tun haben:

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

oder wenn sie nicht genau das gleiche könnte man die Listener-Methode zugreifen, indem l.onClick (Null); manuell ..

7

Sie sollten drehen Sie die einfachste Art und Weise zu verwenden, die ich immer als unten tun:

@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; 
       } 

    } 
}; 
+0

Ein Knopf Vorschlag wäre, jeden Fall zu brechen. das würde es effizienter machen. –

5

Sie so etwas wie dies in der XML-Datei

<Button 
android:layout_height="wrap_content" 
android:layout_width="wrap_content" 
android:onClick="some_function" /> 
tun können

und setzen Sie diese Funktion in die Java-Datei

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

und setzen Sie die some_function in beiden "onClick" s

+0

Der Funktionsparameter '(View view)' ist der Fehler. Vielen Dank! –