CustomImageView + GridView + onItemClick

Dieses Thema im Forum "Android App Entwicklung" wurde erstellt von Unicate, 30.09.2010.

  1. Unicate, 30.09.2010 #1
    Unicate

    Unicate Threadstarter Android-Experte

    Beiträge:
    473
    Erhaltene Danke:
    57
    Registriert seit:
    09.08.2010
    Hallo alle zusammen!

    Ich habe eine CustomView sie heisst CheckableImageView:
    PHP:
    package de.mms.anti.android.redbull.customviews;

    import android.content.Context;
    import android.graphics.Bitmap;
    import android.graphics.BitmapFactory;
    import android.graphics.Canvas;
    import android.graphics.Paint;
    import android.util.AttributeSet;
    import android.view.MotionEvent;
    import android.widget.Checkable;
    import android.widget.ImageView;
    import de.mms.anti.android.redbull.R;

    public class 
    CheckableImageView extends ImageView implements Checkable {

        
        private 
    boolean _checked false;
        private 
    boolean _enabled true;
        private 
    Bitmap _bitmapChecked;
        private 
    Bitmap _bitmapUnchecked;
        private 
    OnCheckedChangeListener _listener;
        
        public 
    CheckableImageView(Context contextAttributeSet attrsint defStyle) {
            
    super(contextattrsdefStyle);
            
    init();
        }

        public 
    CheckableImageView(Context contextAttributeSet attrs) {
            
    super(contextattrs);
            
    init();
        }

        public 
    CheckableImageView(Context context) {
            
    super(context);
            
    init();
        }
        
        public 
    void init() {
            
    _bitmapChecked BitmapFactory.decodeResource(getResources(), R.drawable.field_checked);
            
    _bitmapUnchecked BitmapFactory.decodeResource(getResources(), R.drawable.field_emtpy); 
        }
        
        
        
        public 
    void setOnCheckedChangeListener(OnCheckedChangeListener listener) {
            
    _listener listener;
        }
        @
    Override
        
    protected void onDraw(Canvas canvas) {
            
    super.onDraw(canvas);
            if(
    _enabled) {
                
    Bitmap bitmap = (_checked)?_bitmapChecked:_bitmapUnchecked;
                
    canvas.drawBitmap(bitmap5,5,new Paint());
            }
        }
        
        @
    Override
        
    public boolean onTouchEvent(MotionEvent event) {
            if(
    _enabled && event.getAction() == MotionEvent.ACTION_UP) {
                
    toggle();
                
    invalidate();
            }
            return 
    super.onTouchEvent(event);
        }
        

        @
    Override
        
    public boolean isChecked() {
            return 
    _checked;
        }

        @
    Override
        
    public void setChecked(boolean checked) {
            if(
    _checked != checked && null != _listener) {
                
    _checked checked;
                
    _listener.onCheckedChanged(thischecked);
            } else {
                
    _checked checked;
            }
        }


        @
    Override
        
    public void toggle() {
            
    _checked = !_checked;
            if(
    null != _listener)
                
    _listener.onCheckedChanged(this_checked);
        }
        
        @
    Override
        
    public void setEnabled(boolean enabled) {
            
    _enabled enabled;
            
    super.setEnabled(enabled);
        }

    }

    Diese lade ich in eine GridView.

    Wenn ich der GridView nun einen onItemClickListener gebe, dann wird dieser nicht aufgerufen.
    Wenn ich aber das CheckableImageView auf disabled setze (und somit keine checkbox mehr reinmale), dann funktioniert es.

    Was mach ich falsch, bzw. wie bekomme ich meine View dazu auch auf onItemClick zu reagieren?
     
  2. andy572, 30.09.2010 #2
    andy572

    andy572 Android-Hilfe.de Mitglied

    Beiträge:
    84
    Erhaltene Danke:
    5
    Registriert seit:
    05.09.2010
    Phone:
    Samsung Galaxy S3
    Hi,

    eine ImageView hat m.E. einen OnClickListener vorinstalliert - ergo müsstest Du das onClick(View) in deiner ImageView implementieren ... glaub ich zumindest ;)
     
  3. Unicate, 01.10.2010 #3
    Unicate

    Unicate Threadstarter Android-Experte

    Beiträge:
    473
    Erhaltene Danke:
    57
    Registriert seit:
    09.08.2010
    Dacht ich auch! Aber die ImageView hat keine onClick Methode zum überschreiben
     
  4. andy572, 01.10.2010 #4
    andy572

    andy572 Android-Hilfe.de Mitglied

    Beiträge:
    84
    Erhaltene Danke:
    5
    Registriert seit:
    05.09.2010
    Phone:
    Samsung Galaxy S3
    Sorry, ich "dachte" :unsure:

    Und wenn Deine CheckableImageView einen OnClickListener implementiert und nicht die Checkable class?
    Sollte doch damit gehen - spätestens dort kannst Du ja dann das onClick(View v) implementieren und in Deiner Klasse einen "checked" Status setzen und diesen anzeigen. checked nimmst Du als boolschen Wert, den kannst Du dann ja verarbeiten (toggle,isChecked, etc) und als Image/Canvas anzeigen lassen.
     

Diese Seite empfehlen