Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/188.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_Fragment - Fatal编程技术网

如何在Android中处理碎片重新加载?

如何在Android中处理碎片重新加载?,android,android-fragments,fragment,Android,Android Fragments,Fragment,我创建了一个带有自定义页脚的活动,该页脚有4个按钮 单击时页脚按钮的代码: @Override public void onClick(View v) { try { switch (v.getId()) { case R.id.button1: getSupportFragmentManager() .beginTransa

我创建了一个带有自定义页脚的活动,该页脚有4个按钮

单击时页脚按钮的代码:

 @Override
public void onClick(View v)
{
    try
    {
        switch (v.getId())
        {
            case R.id.button1:

                    getSupportFragmentManager()
                            .beginTransaction()
                            .addToBackStack(null)
                            .replace(R.id.flcontent,Tab1)
                            .commit();

                break;

            case R.id.button2:

                getSupportFragmentManager()
                        .beginTransaction()
                        .addToBackStack(null)
                        .replace(R.id.flcontent,Tab2)
                        .commit();

                break;

            case R.id.button3:

                getSupportFragmentManager()
                        .beginTransaction()
                        .addToBackStack(null)
                        .replace(R.id.flcontent, Tab3)
                        .commit();

                break;

            case R.id.button4:


                getSupportFragmentManager()
                        .beginTransaction()
                        .addToBackStack(null)
                        .replace(R.id.flcontent, Tab4)
                        .commit();

                break;



        }
    } catch (Exception e)
    {
        e.printStackTrace();
    }

}
在Tabs的onCreate方法中,我调用服务器获取列表。 不同的选项卡有不同的请求

当我单击按钮2时,Tab2加载,依此类推,直到按钮4,Tab4

例如,当我从Tab1导航到Tab2时: 当我单击按钮2时,Tab1被Tab2替换,并加载一个新列表。
当我单击按钮1返回时,如何防止在Tab1中再次调用服务器?

有一个android片段的生命周期方法,每当我们的片段被其他片段替换时,该方法就会自动被调用

使用应用程序中用作选项卡的片段的适当片段活动生命周期方法。e、 g.当您的应用程序从tabl播放到tab2时,您使用以下方法

//Add the below method to your tab1 fragment
@Override
void onDetach (){
   // write code here that would tell the server to stop loading data
   // you can also use onPause and onStop
}
查看android开发者文档中的片段生命周期方法
对我来说,最好的方法是创建一个Singleton类,其中包含从服务器返回的所有选项卡的所有数据

当您显示lets say Tab1时,您应该检查Singleton类中是否有此选项卡的任何信息。如果有什么问题,不要给服务器打电话

您还可以通过在描述特定选项卡的每个类中为来自服务器的信息提供一个静态数据容器(列表、哈希映射等)来实现这一点

我个人更喜欢第一种方式


@KhizarHayat建议就像我上面提到的第二个选择,但是,只要确保片段在事务期间被销毁后,服务器上的数据不会被删除。

创建一个静态变量来跟踪,如果您调用了服务器,那么您就不会再调用它。请详细说明一下。请检查更新后的答案,并查看文档中的片段,以便更好地理解。