Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/180.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 如何在按下后退按钮时恢复碎片的整体视图?_Android_Android Fragments_Xamarin.android - Fatal编程技术网

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