我有TabActivity
来举办其他三项活动。
如果选择了第一个标签,我可以更改设备方向,一切正常。
如果我转到第二个或第三个选项卡并更改方向,则选项卡子活动的(第二个和第三个)onCreate()
方法会被调用两次,这是第一次设置默认选项卡内容(第一个)一个)和第二个onCreate,正在设置选定的选项卡内容(这是第一次)。
为什么onCreate()
方法被调用两次,我该如何解决问题?
编辑:
我不想在清单中使用android:configChanges="orientation"
,因为我想让应用程序标题和系统栏向下并在纵向上显示它们,这只有在设置内容之前才有可能... < / p>
答案 0 :(得分:1)
使用清单文件中的android:configChanges="orientation"
属性,如下所示
<activity android:name=".Settings" android:screenOrientation="portrait"
android:configChanges="orientation"></activity>
答案 1 :(得分:1)
就这样我很清楚,你是说你有几个标签,它们使用不同的方向(纵向或横向),你在切换标签和正确设置相应的方向时遇到问题?
回应Cata的评论:
是的,所以无论何时旋转屏幕,当前可见活动都会被销毁,并且再次调用onCreate(如果我记得这些步骤)。您需要做的是调用getCurrentTab(),它返回表示选项卡的int值,并在调用onCreate时将其重置为活动选项卡。您可以通过多种方式执行此操作...通过使用一个小方法来处理并通过onCreate调用它,或者使用onSaveInstanceState(Bundle)来保存当前数据,以及onRestoreInstanceState()来重新加载选项卡数据。 / p>
你可以设置一个全局int(int currentTab = 0),而不是在onCreate()中设置它,在你的onSaveInstanceState(Bundle)方法中你可以将它保存到当前标签(currentTab = getCurrentTab()),然后在onRestoreInstanceState()你可以再次设置它。
这有意义吗?
请记住,我没有对此进行测试,但如果您不熟悉这两种方法调用,则愿意这样做。
下面是将数据保存到Bundle的示例 - 还记得onCreate接受该活动包作为参数。
@Override
public void onSaveInstanceState(Bundle outState){
// Store UI state to the savedInstanceState.
// This bundle will be passed to onCreate on next call.
super.onSaveInstanceState(outState);
String strMinSec = timer.getText().toString();
String strMs = timerMs.getText().toString();
long curElapstedTime = elapsedTime;
boolean timerStopped = stopped;
int orientation = this.getResources().getConfiguration().orientation;
outState.putString("MinSec", strMinSec);
outState.putString("Ms", strMs);
outState.putLong("Elapsed", elapsedTime);
outState.putBoolean("Stopped", timerStopped);
outState.putInt("Orientation", orientation);
}
@Override
public void onRestoreInstanceState(Bundle savedInstanceState){
// Restore UI state from the savedInstanceState.
if (savedInstanceState != null){
String MinSec = savedInstanceState.getString("MinSec");
if (MinSec != null)
{
timer.setText(MinSec);
}
String Ms = savedInstanceState.getString("Ms");
if (Ms != null)
{
timerMs.setText(Ms);
}
long elapsed = savedInstanceState.getLong("Elapsed");
if(elapsed > 0)
elapsedTime = elapsed;
int theOrientation = savedInstanceState.getInt("Orientation");
//if(theOrientation > 0)
//this.setRequestedOrientation(theOrientation);
}
}
答案 2 :(得分:0)
我认为最好的解决方案是使用单个Activity
采用不同的方法,并将每个标签内容放在标签的不同LinearLayout
和onClick()
方法中(这将是是一些按钮)在布局之间切换......
如果有人有更好的想法,请在此发布!
谢谢!