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