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

时间:2015-05-05 14:39:04

标签: android

我有问题。基本情况:我有一个显示两个选项卡的应用程序。我使用ViewPager,FragmentPagerAdapter等实现这一点。我想在每次更改位置时更改几个TextView的值。我附上了一些代码片段:

我使用以下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上的TextViews。因此,我实现了一个接口。以下是该方法的一小段代码片段:

public void updateCockpit(String a, String b) {
    FragmentManager manager = getSupportFragmentManager();
    CockpitFragment cockpitFragment = (CockpitFragment) manager.findFragmentByTag(cockpitFragmentTAG);
    cockpitFragment.changeText(a, b);       
}

我在我的MainActivity中将其称为:

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块就被执行了。但是,屏幕仍会在一段时间后更新。 “解决方法”是将catch块留空 - 我仍然会得到正确的结果。但是,这不是一个好的解决方案。有谁知道为什么会这样?

1 个答案:

答案 0 :(得分:0)

onResume()中重新加载您的数据,因为每次旋转屏幕时,都会重新加载Activity或Fragmente,并清除屏幕视图中的数据。