2014-03-28 7 views
1

Xamarin 기반의 안드로이드 응용 프로그램에서 조각을 사용하고 있지만 화면 (이 새로운 조각을 볼 수있는 경우에도)을 추가()해도 화면을 볼 수 있습니다. 이전 조각의 청취자가 아직 작동하고 있음을 나타냅니다.조각 추가 문제

두 조각이 있습니다. fragment1은 listView이고, fragment2는 fragment1에있는 엔티티의 세부 정보를 보여줍니다. 이 목록의 항목을 클릭하면 새로운 조각 (조각 2)이 화면에 추가됩니다. 그러나 fragment2를 볼 수 있다고하더라도, 화면을 클릭하면 fragment1의 리스너가 여전히 활성화되어 있기 때문에 세 번째 조각이 화면에 추가됩니다.

이 문제를 어떻게 해결할 수 있습니까?

이것은 내가 단편 변경하는 데 사용하는 기능을하는 경우 : 귀하의 세부 조각 setOnTouchListener에서

<?xml version="1.0" encoding="utf-8"?> 
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:orientation="vertical" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    android:id="@+id/pnlMain" 
    android:background="#ffffff" /> 
+0

첫 번째 질문에서 올바른 서식을 지정하려면 +1하십시오. – Kedarnath

+0

이것이 일어날 수있는 유일한 방법은 조각 자체의 무언가가 아닌 조각 컨테이너에 터치 리스너를 설정하는 것입니다. – Squonk

답변

0

에 : 단순히 빈 layout..this fragment2 지금까지

private void ChangeFragment (TitledFragment newFragment, string fragmentTitle) 
     { 
      if (newFragment is IPrimaryFragment) { 
       _drawerToggle.DrawerIndicatorEnabled = true; 
       _drawer.SetDrawerLockMode (DrawerLayout.LockModeUnlocked); 
       _displayingPrimaryFragment = true; 
       SupportFragmentManager.BeginTransaction().Replace (Resource.Id.content_frame, newFragment).Commit(); 
       if (_currentFragment != null) 
        _currentFragment.Cleanup(); 
      } else { 
       _drawerToggle.DrawerIndicatorEnabled = false; 
       _drawer.SetDrawerLockMode (DrawerLayout.LockModeLockedClosed); 
       _displayingPrimaryFragment = false; 
       SupportFragmentManager.BeginTransaction().Add (Resource.Id.content_frame, newFragment).AddToBackStack (null).Commit(); 
      } 

      if (fragmentTitle != null) 
       newFragment.Title = fragmentTitle; 

      ActionBar.Title = newFragment.Title; 

      _currentFragment = newFragment; 
     } 

     public override bool OnKeyUp (Keycode keyCode, KeyEvent e) 
     { 
      if (keyCode == Keycode.Menu) { 
       if (_drawer.IsDrawerOpen (GravityCompat.Start)) 
        _drawer.CloseDrawer (GravityCompat.Start); 
       else 
        _drawer.OpenDrawer (GravityCompat.Start); 
       return true; 
      } 
      if (keyCode == Keycode.Back) { 
       if (_displayingPrimaryFragment) { 
        DialogUtils.ShowDialog (this, GetString (Resource.String.do_you_really_want_to_exit), null, true, GetString (Resource.String.yes), GetString (Resource.String.no),() => base.Finish(),() => {}); 
        return true; 
       } else { 
        SupportFragmentManager.PopBackStackImmediate(); 
        _currentFragment = (TitledFragment) SupportFragmentManager.FindFragmentById (Resource.Id.content_frame); 
        if (_currentFragment is IPrimaryFragment) { 
         _displayingPrimaryFragment = true; 
         _drawerToggle.DrawerIndicatorEnabled = true; 
         _drawer.SetDrawerLockMode (DrawerLayout.LockModeUnlocked); 
        } 
        ActionBar.Title = _currentFragment.Title; 
        return true; 
       } 
      } 
      return base.OnKeyUp (keyCode, e); 
     } 

은 XML이다 view()를 얻고 true를 반환합니다.

세부 정보 조각이 목록 조각 위에 오버레이되어 있고 세부 정보가 비어 있고 터치 이벤트를 사용하지 않았기 때문에 목록 조각에 전파됩니다.

희망이 있습니다. !!!

+0

고마워, 작동 해! :) 나는 이것이 "보통"이라고 생각하지 않는다. 안드로이드 프레임 워크는 자동으로 이것을해야한다. 그러나 안드로이드는 안드로이드이고 우리는 그것을 xD로 알고있다. 다시 한번 감사드립니다. – user3471528