2016-04-25 6 views
0

Ich bin derzeit ein Image in Android als solche Verlängerung:Warum wird onClick nicht für Kostüm-ImageButton aufgerufen?

public class Pen extends ImageButton { 
    public Pen(Context context, AttributeSet attrs) { 
     super(context, attrs); 
    } 

    @Override 
    public boolean onTouchEvent(MotionEvent event) { 
     System.out.println("Now I am setting Pen"); 
     return true; 
    } 
} 

dann in XML-Datei ich tun:

..... 

    <com.example.testsetimagebmp.Pen 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:id="@+id/pen" 
     android:background="@drawable/pen" /> 

    .... 

schließlich in MainActivity

public class MainActivity extends Activity { 

    Pen myImgbutton; 
@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_main); 

    myImgbutton = (Pen) findViewById(R.id.pen); 

    myImgbutton.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View v) { 
      // Toast.makeText(TravelBite.this, "test", Toast.LENGTH_SHORT).show(); 
      System.out.println("I am form MainActivity onClick"); 
     } 
    }); 

    // .... 
} 

Jedes Mal, wenn ich versuche, auf drücken Der ImageButton onClick wird nie aufgerufen. Aber wenn Kostüm Stift mit ImageButton ersetzen, funktioniert alles. Fehle ich etwas beim Erben vom ImageButton?

+0

Wie wird Ihr Code überhaupt kompiliert? Sie geben nichts von 'onTouchEvent()' zurück. –

+0

@ShadabAnsari Sorry Kopieren Paste Fehler – pokche

+2

'Dann in Xml-Datei, die ich: ..... ....' - es heißt Morse-Code-Programmierung :) –

Antwort

2

Jedes Mal, wenn ich versuche, auf dem Image onClick nie drücken

Click ist aufgerufen wird Sequenz von zwei Ereignissen: ACTION_DOWN und (weiter) ACTION_UP. Wie Sie Ihre onTouchEvent() hinzugefügt haben, dann weiß kein anderer Code als Ihre, dass die Ansicht angeklickt wurde, nicht zu erwähnen geklickt. Anstatt also return true; zu tun (was besagt, dass Sie das MotionEvent gehandhabt haben und das System weiß, dass es keinen anderen Listener gibt), sollten Sie den ursprünglichen Code return super.onTouchEvent(MotionEvent event); aufrufen, damit er Tippen und auf Klicks oder lange Klicks reagieren kann zurückzugeben, was sie produzieren würde:

@Override 
public boolean onTouchEvent(MotionEvent event) { 
    System.out.println("Now I am setting Pen"); 
    return super.onTouchEvent(event); 
} 
+0

Yup macht Sinn jetzt :) – pokche

1

Durch die Rückgabe true Sie sagen, dass Sie Touch Ereignis und keine Eingabeereignisse verbraucht haben, werden weiter an andere Hörer übertragen werden. Sie sollten verwenden -

@Override 
    public boolean onTouchEvent(MotionEvent event) { 
     System.out.println("Now I am setting Pen"); 
     return super.onTouchEvent(event); 
    } 
Verwandte Themen