2016-04-09 4 views
1

Ich möchte ein generisches System implementieren, das alle onTouchListener auf einer ViewGroup überschreibt und sie später wieder herstellt.Android: wo ist View.getOnTouchListener()?

Ich habe über Map gelernt, um die ursprünglichen Listener jeder Ansicht zu speichern, aber ich habe keine Möglichkeit gefunden, den aktuell zugewiesenen Listener zu erhalten.

brauche ich so etwas wie dies zu tun:

View v; 
View.onTouchListener backupListener = v.getOnTouchListener(); 

Aber leider getOnTouchListener nicht existiert? Wie kann ich ?

+0

zeigen Sie Ihren Code. – Sibidharan

Antwort

1

, wenn Sie verwenden setOnTouchListener es ist nicht das Touch-Listener überschreiben, sondern nur einen Zeiger auf einen anderen Touch-Hörer zu speichern, so dass Sie tatsächlich auf den ursprünglichen Touch Zuhörer anrufen:

view = findViewById(R.id.someView); 
    //alternative: 
    view.setOnTouchListener(new View.OnTouchListener() { 
     @Override 
     public boolean onTouch(View v, MotionEvent event) { 
      Log.d("touch"," alternative"); 
      return true; 
     } 
    }); 
    //call to the original: 
    view.setOnTouchListener(new View.OnTouchListener() { 
     @Override 
     public boolean onTouch(View v, MotionEvent event) { 
      return v.onTouchEvent(event); 
     } 
    }); 

Sie die Quelle überprüfen können Code setOnTouchListener();

+0

@Julien: hast du das probiert? können Sie die Antwort annehmen –

+0

Ich schaue auf den Quellcode, und das scheint offensichtlich falsch zu sein ... wo siehst du das? – Oded

+0

@Oded: http://grepcode.com/file/repository.grepcode.com/java/ext/com.google.android/android/5.1.1_r1/android/view/View.java#View.setOnTouchListener%28android. view.View.OnTouchListener% 29. Gehe zu Zeile 4898 (das ist die Implementierung). Achten Sie darauf, dass ich in meinem Beispiel "onTouchEvent" und nicht "onTouch" angerufen habe. –

Verwandte Themen