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

Android:屏幕旋转会在更新屏幕时导致错误

Android:屏幕旋转会在更新屏幕时导致错误,android,Android,我有个问题。基本情况:我有一个显示两个选项卡的应用程序。我使用ViewPager、FragmentPagerAdapter等实现了这一点。每当位置发生变化时,我希望更改一些文本视图的值。我附上了一些代码片段: 我使用以下FragmentPagerAdapter添加选项卡: class MyAdapter extends FragmentPagerAdapter { public MyAdapter(FragmentManager fm) { super(fm);

我有个问题。基本情况:我有一个显示两个选项卡的应用程序。我使用ViewPager、FragmentPagerAdapter等实现了这一点。每当位置发生变化时,我希望更改一些文本视图的值。我附上了一些代码片段:

我使用以下FragmentPagerAdapter添加选项卡:

class MyAdapter extends FragmentPagerAdapter {

    public MyAdapter(FragmentManager fm) {
        super(fm);
    }

    public Fragment getItem(int numberTabs) {
        // Assign fragments to the tabs
        Fragment contentFragment = new Fragment();
        switch(numberTabs){
        case 0:
            contentFragment = new CockpitFragment();
            break;
        case 1:
            contentFragment = new GoogleMapFragment();
            break;
        }
        return contentFragment;
    }

    public int getCount() {
        // Return the number of existing tabs
        return 2;
    }   
}
现在我想从MainActivity更改CockpitFragment上的文本视图。因此,我实现了一个接口。下面是该方法的一个小代码片段:

public void updateCockpit(String a, String b) {
    FragmentManager manager = getSupportFragmentManager();
    CockpitFragment cockpitFragment = (CockpitFragment) manager.findFragmentByTag(cockpitFragmentTAG);
    cockpitFragment.changeText(a, b);       
}
在我的主要活动中,我这样称呼它:

public void onLocationChanged(Location location) {
    try {
        communicator.updateCockpit("a", "b");
    } catch (Exception e) {
        Toast.makeText(this, "ERROR", Toast.LENGTH_SHORT).show();
    }
} 
public void changeText(String a, String b) {
    inputFieldA.setText(a);
    inputFieldB.setText(b);
}
我的片段中的实现如下所示:

public void onLocationChanged(Location location) {
    try {
        communicator.updateCockpit("a", "b");
    } catch (Exception e) {
        Toast.makeText(this, "ERROR", Toast.LENGTH_SHORT).show();
    }
} 
public void changeText(String a, String b) {
    inputFieldA.setText(a);
    inputFieldB.setText(b);
}

现在,如果不旋转屏幕,更改值可以正常工作。当我旋转屏幕时,我的捕捉块被执行。但是,屏幕仍将在一段时间后更新。一个“解决方法”是将catch块留空-我仍然会得到正确的结果。然而,这不是一个好的解决方案。有人知道为什么会发生这种情况吗?

onResume()
中重新加载数据,因为每次旋转屏幕时,都会重新加载活动或片段,并清理屏幕视图中的数据。

是的,我知道这一事实,但实际上我要设置的值不应该有任何问题。当我硬编码某些值时,也会导致此问题。或者你的意思是保存整个片段,然后在onResume方法中重新加载它?我认为保存数据并在onResume中重新加载可以解决你的问题,但是这样做很无聊。谢谢你的回答,但这没有帮助。我仍然得到错误。我真的不明白为什么它不工作……什么是
communicator
这里的活动实例或片段?communicator是一个包含抽象方法“updateCockpit”的类(接口)。它在MainActivity中实现并定义。从那里,我在onLocationChanged方法中调用它。UpdateCockpit最终从片段访问changeText方法。