Android 如何在按下后退按钮时恢复碎片的整体视图?
我第一次需要从服务器中提取数据。当从另一个Android 如何在按下后退按钮时恢复碎片的整体视图?,android,android-fragments,xamarin.android,Android,Android Fragments,Xamarin.android,我第一次需要从服务器中提取数据。当从另一个片段按下后退按钮时,应恢复以前的视图,但不能再次重新创建视图并再次从服务器中提取数据。 我的片段的一部分如下所示: AttendanceFragment.cs public override View OnCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { .......
片段
按下后退按钮
时,应恢复以前的视图,但不能再次重新创建视图并再次从服务器中提取数据。
我的片段的一部分如下所示:
AttendanceFragment.cs
public override View OnCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState)
{
.......
if (savedInstanceState == null)
{
rootView = inflater.Inflate(Resource.Layout.AttendanceListview, container, false);
}
.........
// this is where I get data from WebServer
GetClassSection(); // I am confused here where to put this method and pull data from server
listView.ItemClick += OnListItemClick;
return rootView;
}
public override void OnSaveInstanceState(Bundle outState)
{
base.OnSaveInstanceState(outState);
outState.PutString("_dataGotFromServer", dataGotFromServer);
}
从按钮
登录到该片段时,单击
我用这种方式替换了片段
public void ReplaceFragment(Context context, Fragment newFragment, string TAG)
{
Android.Support.V4.App.FragmentManager fragmentManager = ((FragmentActivity)context).SupportFragmentManager;
Android.Support.V4.App.FragmentTransaction ft = fragmentManager.BeginTransaction();
ft.Replace(Resource.Id.HomeFrameLayout, newFragment);
ft.AddToBackStack(TAG);
ft.Commit();
}
BaseAdapter在此初始化
我的数据从服务器中提取并在ui中更新
private async void GetClassSection()
{
try
{ ...........
Activity.RunOnUiThread(async () => {
await Task.Delay(1 * 100);
attendanceAdapter.NotifyDataSetChanged();
progress.Visibility = ViewStates.Gone;
});
}
catch (Java.Lang.Exception e)
{
}
}
谢谢。根据,请在fragment类上尝试创建活动
当从另一个片段中按下“后退”按钮时,应恢复以前的视图,但不能再次重新创建视图并再次从服务器中提取数据
按“上一步”按钮时,如果您不希望片段还原数据并重新创建视图,请使用FragmentTransaction.Add()
方法而不是FragmentTransaction.Replace()
将是更好的选择
当您使用Replace
方法时,它将替换添加到容器中的现有片段。这本质上与调用Remove(Fragment)
所有当前添加的片段(使用相同的containerwid
添加)相同,然后调用Add(int,Fragment,String)
,使用此处给出的相同参数。因此,当您想要重用某些片段时,您必须考虑恢复数据,这将有点复杂
但是当您使用Add
方法时,它将向活动状态添加一个片段。此片段
还可以选择将其视图
(如果fragment.onCreateView返回非null)放入活动
的容器视图中。这意味着前面的片段
只需隐藏,当您想要显示前面的片段
时,您无需担心如何恢复数据
这是我的密码:
public void ReplaceFragment(Context context, Fragment newFragment, string TAG)
{
Android.Support.V4.App.FragmentManager fragmentManager = ((FragmentActivity)context).SupportFragmentManager;
Android.Support.V4.App.FragmentTransaction ft = fragmentManager.BeginTransaction();
//When you want to show your AttendanceFragment
if (newFragment == null)
{
newFragment = new AttendanceFragment();
}
if (newFragment.IsAdded)
{
ft.Show(mg);
}
else
{
newFragment.Add(Resource.Id.HomeFrameLayout, newFragment);
}
if (anotherFragmentInstance != null && anotherFragmentInstance.IsAdded)
{
ft.Hide(anotherFragmentInstance);
}
ft.AddToBackStack(TAG);
ft.Commit();
}
@Ishwor Khanal,有什么问题吗?
private async void GetClassSection()
{
try
{ ...........
Activity.RunOnUiThread(async () => {
await Task.Delay(1 * 100);
attendanceAdapter.NotifyDataSetChanged();
progress.Visibility = ViewStates.Gone;
});
}
catch (Java.Lang.Exception e)
{
}
}
public void ReplaceFragment(Context context, Fragment newFragment, string TAG)
{
Android.Support.V4.App.FragmentManager fragmentManager = ((FragmentActivity)context).SupportFragmentManager;
Android.Support.V4.App.FragmentTransaction ft = fragmentManager.BeginTransaction();
//When you want to show your AttendanceFragment
if (newFragment == null)
{
newFragment = new AttendanceFragment();
}
if (newFragment.IsAdded)
{
ft.Show(mg);
}
else
{
newFragment.Add(Resource.Id.HomeFrameLayout, newFragment);
}
if (anotherFragmentInstance != null && anotherFragmentInstance.IsAdded)
{
ft.Hide(anotherFragmentInstance);
}
ft.AddToBackStack(TAG);
ft.Commit();
}