2013-06-07 32 views
8

Tıklama etkinliği için Framelayour'u kullandım ve 2 günden önce gayet iyi çalışıyordu, ancak wat'un artık işe yaramadığını biliyorum.
Lütfen birisi bana yardım edin.
Kodum aşağıdaki gibidir: Tasarım:FrameLayout click olayı tetiklenmiyor

<FrameLayout 
     android:id="@+id/flWebpre" 
     android:layout_width="fill_parent" 
     android:layout_height="0dp" 
     android:layout_weight="1" > 

     <WebView 
      android:id="@+id/wvWebsite" 
      android:layout_width="fill_parent" 
      android:layout_height="fill_parent" /> 

     <ProgressBar 
      android:id="@+id/pbWebsite" 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content" 
      android:background="@color/white" 
      android:layout_gravity="center_horizontal" /> 
    </FrameLayout> 

Kodu:

FrameLayout flWebPre = (FrameLayout) findViewById(R.id.flWebpre); 
    flWebPre.setOnClickListener(new View.OnClickListener() { 

     @Override 
     public void onClick(View v) { 
      // TODO Auto-generated method stub 
      if (isExpanded) { 
       isExpanded = false; 

       new CollapseAnimation(slidingPanel, panelWidth, 
         TranslateAnimation.RELATIVE_TO_SELF, 0.70f, 
         TranslateAnimation.RELATIVE_TO_SELF, 0.0f, 0, 0.0f, 
         0, 0.0f); 
      } 
     } 
    }); 
+1

Ben zaten bir şey yaptım biliyorum ama, sen FrameLayout parametre olarak "tıklanabilir" koymayı unutmuş. – Tsunaze

cevap

19

kolay yollarından biri, tüm dokunmatik olayları durdurmak etmektir. Varsayılan olarak, ViewGroup#onInterceptTouchEvent, false değerini döndürür.

Özel bir düzen oluşturmak edilebilir:

public class ClickableFrameLayout extends FrameLayout { 
    private OnClickListener mOnClickListener; 

    @Override 
    public void setOnClickListener(OnClickListener l) { 
     super.setOnClickListener(l); 
     mOnClickListener = l; 
    } 

    @Override 
    public boolean onInterceptTouchEvent(MotionEvent ev) { 
     return mOnClickListener != null; 
    } 


    // Standard constructors — just pass everything 
    public ClickableFrameLayout(final Context context) { 
     super(context); 
    } 

    public ClickableFrameLayout(final Context context, final AttributeSet attrs) { 
     super(context, attrs); 
    } 

    public ClickableFrameLayout(final Context context, final AttributeSet attrs, final int defStyleAttr) { 
     super(context, attrs, defStyleAttr); 
    } 

    @TargetApi(Build.VERSION_CODES.LOLLIPOP) 
    public ClickableFrameLayout(final Context context, final AttributeSet attrs, final int defStyleAttr, final int defStyleRes) { 
     super(context, attrs, defStyleAttr, defStyleRes); 
    } 
} 
+0

evet çalışıyor, ancak AtributeSet ile ikinci kurucuyu unuttunuz ... – StefMa

+0

kusursuz çalışıyor ... thx – Erik255

+0

Vay, ne mükemmel bir çözüm ..! –

İlgili konular