Xamarin Android:如果背景设置只有第一个片段可见
Xamarin Android: If background set only first fragment visible
我在抽屉中有一个抽屉布局和 2 个菜单项。如果我加载应用程序,它会正确加载第一个片段。但是如果我打开抽屉和 select 另一个菜单点,它不会改变片段。真的很奇怪,如果我删除它的背景颜色,但它有时会重叠。
谁能告诉我我做错了什么。
在抽屉里调用:
_list.Adapter = new ArrayAdapter<string> (this, Android.Resource.Layout.SimpleListItem1, itemList);
_list.ItemClick += (sender, e) => {
_title = itemList[e.Position];
var fragmentTransaction = FragmentManager.BeginTransaction ();
switch(e.Position)
{
case 0:
fragmentTransaction.Replace (Resource.Id.content_pane, new MedicineListFragment());
break;
case 1:
fragmentTransaction.Replace (Resource.Id.content_pane, new HistoryListFragment());
break;
};
fragmentTransaction.Commit ();
_slidingLayout.SmoothSlideClosed ();
};
第一个片段:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/medicine_list_fragment"
android:orientation="vertical"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:background="?android:windowBackground">
<ListView
android:id="@+id/medicine_list"
android:layout_width="match_parent"
android:layout_height="match_parent" />
第二个片段:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/history_list_fragment"
android:orientation="vertical"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:background="?android:windowBackground">
<TextView
android:layout_width="match_parent"
android:layout_height="match_parent"
android:text="foooo2" />
主要布局:
<ListView
android:id="@+id/left_pane"
android:layout_width="280dp"
android:layout_height="match_parent"
android:layout_gravity="left"
android:background="@android:color/background_dark" />
<FrameLayout
android:id="@+id/content_pane"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="@android:color/transparent" />
有趣的是,如果我调试出现正确的片段,然后屏幕闪烁,旧的又出现了。
我发现了问题。我有这样的事情:
public void FirstLayoutListener(object sender, EventArgs e){
if(_slidingLayout.CanSlide () && !_slidingLayout.IsOpen){
ActionBar.SetDisplayHomeAsUpEnabled (true);
ActionBar.SetHomeButtonEnabled (true);
ActionBar.Title = _title;
} else {
ActionBar.SetDisplayHomeAsUpEnabled (false);
ActionBar.SetHomeButtonEnabled (false);
ActionBar.Title = _drawerTitle;
}
var fragmenTransaction = FragmentManager.BeginTransaction ();
fragmenTransaction.Add (Resource.Id.content_pane, new MedicineListFragment());
fragmenTransaction.Commit ();
_slidingLayout.ViewTreeObserver.GlobalLayout -= FirstLayoutListener;
}
我以为这个方法只在第一次加载时被调用,但它在片段的每次刷新/加载时都会以某种方式调用。因此它总是重新生成第一个片段。
问候
NPadrutt
我在抽屉中有一个抽屉布局和 2 个菜单项。如果我加载应用程序,它会正确加载第一个片段。但是如果我打开抽屉和 select 另一个菜单点,它不会改变片段。真的很奇怪,如果我删除它的背景颜色,但它有时会重叠。
谁能告诉我我做错了什么。
在抽屉里调用:
_list.Adapter = new ArrayAdapter<string> (this, Android.Resource.Layout.SimpleListItem1, itemList);
_list.ItemClick += (sender, e) => {
_title = itemList[e.Position];
var fragmentTransaction = FragmentManager.BeginTransaction ();
switch(e.Position)
{
case 0:
fragmentTransaction.Replace (Resource.Id.content_pane, new MedicineListFragment());
break;
case 1:
fragmentTransaction.Replace (Resource.Id.content_pane, new HistoryListFragment());
break;
};
fragmentTransaction.Commit ();
_slidingLayout.SmoothSlideClosed ();
};
第一个片段:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/medicine_list_fragment"
android:orientation="vertical"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:background="?android:windowBackground">
<ListView
android:id="@+id/medicine_list"
android:layout_width="match_parent"
android:layout_height="match_parent" />
第二个片段:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/history_list_fragment"
android:orientation="vertical"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:background="?android:windowBackground">
<TextView
android:layout_width="match_parent"
android:layout_height="match_parent"
android:text="foooo2" />
主要布局:
<ListView
android:id="@+id/left_pane"
android:layout_width="280dp"
android:layout_height="match_parent"
android:layout_gravity="left"
android:background="@android:color/background_dark" />
<FrameLayout
android:id="@+id/content_pane"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="@android:color/transparent" />
有趣的是,如果我调试出现正确的片段,然后屏幕闪烁,旧的又出现了。
我发现了问题。我有这样的事情:
public void FirstLayoutListener(object sender, EventArgs e){
if(_slidingLayout.CanSlide () && !_slidingLayout.IsOpen){
ActionBar.SetDisplayHomeAsUpEnabled (true);
ActionBar.SetHomeButtonEnabled (true);
ActionBar.Title = _title;
} else {
ActionBar.SetDisplayHomeAsUpEnabled (false);
ActionBar.SetHomeButtonEnabled (false);
ActionBar.Title = _drawerTitle;
}
var fragmenTransaction = FragmentManager.BeginTransaction ();
fragmenTransaction.Add (Resource.Id.content_pane, new MedicineListFragment());
fragmenTransaction.Commit ();
_slidingLayout.ViewTreeObserver.GlobalLayout -= FirstLayoutListener;
}
我以为这个方法只在第一次加载时被调用,但它在片段的每次刷新/加载时都会以某种方式调用。因此它总是重新生成第一个片段。
问候 NPadrutt