我有问题。基本情况:我有一个显示两个选项卡的应用程序。我使用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块留空 - 我仍然会得到正确的结果。但是,这不是一个好的解决方案。有谁知道为什么会这样?
答案 0 :(得分:0)
在onResume()
中重新加载您的数据,因为每次旋转屏幕时,都会重新加载Activity或Fragmente,并清除屏幕视图中的数据。