添加片段的问题

时间:2014-03-28 08:08:11

标签: android android-fragments xamarin.android

我在基于 Xamarin 的Android应用程序中使用片段,但是当我添加()一个新片段时(即使我可以在屏幕上看到这个新片段),如果我触摸屏幕我可以看到旧片段的监听器仍在工作。

我有两个片段。 fragment1是一个listView,fragment2显示了fragment1中存在的实体的详细信息。单击此列表中的项目将在屏幕上添加新片段(fragment2)。但即使我能看到fragment2,如果我点击屏幕,屏幕上会添加第三个片段,因为fragment1的监听器仍处于活动状态。

如何解决此问题?

如果我用来改变片段的函数:

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

现在,fragment2只是一个空布局..这是xml:

<?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" />

1 个答案:

答案 0 :(得分:0)

在您的详细信息片段中,setOnTouchListener获取view()并返回true。

我假设详细信息片段覆盖在列表片段的顶部,因为细节是空的并且不消耗任何触摸事件,所以它会传播到列表片段中。

希望它有所帮助!!!