2013-03-10 40 views
5

コードを使用してRelativeLayoutから追加または削除されたフラグメントがあります。フラグメントの1つはListFragmentであり、クローズと保存ボタンを持つ他のフラグメントとは反対に、これにはリストのみが含まれています。フラグメントを外して削除する:

私の目標は、このフラグメントをアクティビティの任意の場所でクリックして閉じる/削除することです。

私は、次のコードを発見した:

@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); 
} 

それの外側をクリックしたときではないフルスクリーンアクティビティを閉じますが、私はちょうど私が私のフラグメント矩形を見つけるのですかどのように理解していないようです。

一部の人が私を助けて正しい方向に向けることができますか?どんな助けもありがとう。

ありがとうございました。

答えて

5

さて、私は最終的にこれを考え出した:

@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

コンテナのRelativeLayoutにクリックリスナーを追加できます。フラグメントがアクションに関するものであれば、RelativeLayoutのリスナーをアクティブにするので、リスナーはフラグメントが存在する間のみ動作します。

+0

は本当にあなたが私の質問は最後まで読んだことが、あなたの答えを理解していませんでしたか? –

関連する問題