2013-03-10 53 views
5

Dinamik olarak kod kullanarak RelativeLayout'dan eklenen ve kaldırılan bazı parçalarım var. Fragment'lerden biri ListFragment'dur ve Close and Save Düğmelerine sahip diğer parçalarımın aksine, bu sadece bir liste içerir.Dışa tıklayarak/öğesine dokunarak Parçayı Kaldırma:

Amacım, bu parçayı etkinlikteki herhangi bir yerde dışına tıklayarak kapatmak/kaldırmaktır.

Aşağıdaki kodu bulduk:

@Override 
public boolean onTouchEvent(MotionEvent event) { 
    // I only care if the event is an UP action 
    if (event.getAction() == MotionEvent.ACTION_UP) { 
     // create a rect for storing the window rect 
     Rect r = new Rect(0, 0, 0, 0); 
     // retrieve the windows rect 
     this.getWindow().getDecorView().getHitRect(r); 
     // check if the event position is inside the window rect 
     boolean intersects = r.contains((int) event.getX(), (int) event.getY()); 
     // if the event is not inside then we can close the activity 
     if (!intersects) { 
      // close the activity 
      this.finish(); 
      // notify that we consumed this event 
      return true; 
     } 
    } 
    // let the system handle the event 
    return super.onTouchEvent(event); 
} 

bunun dışında tıklandığında bir değil tam ekran aktivitesini kapatır, ancak ben sadece benim parçası dikdörtgen bulurum anlamak görünmüyor.

Bazı yardımcı olabilir ve bana doğru yönde işaret edebilir mi? Herhangi bir yardım takdir edilecektir.

Teşekkürler.

cevap

5

Eh nihayet bu anladım:

@Override 
public boolean onTouchEvent (MotionEvent event) 
{ 
    // I only care if the event is an UP action 
    if (event.getAction() == MotionEvent.ACTION_UP) 
    { 
     //and only is the ListFragment shown. 
     if (isListFragmentShown) 
     { 
      // create a rect for storing the fragment window rect 
      Rect r = new Rect (0, 0, 0, 0); 
      // retrieve the fragment's windows rect 
      currentFragment.getView().getHitRect(r); 
      // check if the event position is inside the window rect 
      boolean intersects = r.contains ((int) event.getX(), (int) event.getY()); 
      // if the event is not inside then we can close the fragment 
      if (!intersects) { 
       Log.d(TAG, "pressed outside the listFragment"); 
       FragmentTransaction fragmentTransaction; 
       fragmentTransaction = fragmentManager.beginTransaction(); 
       fragmentTransaction.remove(currentFragment).commit(); 
       // notify that we consumed this event 
       return true; 
      } 
     } 
    } 
    //let the system handle the event 
    return super.onTouchEvent (event); 
} 
1

Kapsayıcınıza RelativeLayout öğesine tıklama dinleyicisi ekleyebilirsiniz. Parçanın harekete geçmesi durumunda, RelativeLayout'un dinleyicisini aktif hale getirin, böylece dinleyici sadece fragman çalışırken çalışır.

+0

gerçekten benim sorum sonuna kadar okudum, cevabınızı anlaşılmadı mı? –