我在基于 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" />
答案 0 :(得分:0)
在您的详细信息片段中,setOnTouchListener获取view()并返回true。
我假设详细信息片段覆盖在列表片段的顶部,因为细节是空的并且不消耗任何触摸事件,所以它会传播到列表片段中。
希望它有所帮助!!!