2013-06-07 23 views
8

Użyłem Framelayour dla zdarzenia kliknięcia. To działało dobrze przed 2 dniami, ale nie wiem, czy zdarzyło się, że teraz nie działa.
Proszę, pomóż mi.
Moje kodu jest jak poniżej: Projekt:Zdarzenie kliknięcia FrameLayout nie uruchamia się

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

Kod:

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

wiem, że już zrobił coś, ale zapomniał umieścić „klikalne” jako parametr w swojej FrameLayout. – Tsunaze

Odpowiedz

19

Prostym sposobem jest przechwytywać wszystkie zdarzenia dotykowe. Domyślnie ViewGroup#onInterceptTouchEvent zwraca false.

Można utworzyć niestandardowy układ:

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

Tak, działa, ale zapomniałeś drugiego konstruktora z AtributeSet ... – StefMa

+0

działa idealnie ... thx – Erik255

+0

Wow, co za idealne rozwiązanie ..! –

Powiązane problemy