Android统计用户更改方向的次数
我试图创建一个基本的应用程序,只计算用户将方向从纵向更改为横向的次数,并在屏幕上显示计数。我有:Android统计用户更改方向的次数,android,Android,我试图创建一个基本的应用程序,只计算用户将方向从纵向更改为横向的次数,并在屏幕上显示计数。我有: public class MainActivity extends Activity { int count = 0; private static boolean inLandscape = true; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceSt
public class MainActivity extends Activity {
int count = 0;
private static boolean inLandscape = true;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
TextView tv = (TextView) findViewById(R.id.count);
tv.setText(getResources().getString(R.string.count) + ' ' + count);
if (!inLandscape && getResources().getConfiguration().orientation == Configuration.ORIENTATION_LANDSCAPE)
{
inLandscape = true;
count++;
Log.e("Debug","In Landscape " + count);
}
else if (inLandscape && getResources().getConfiguration().orientation == Configuration.ORIENTATION_PORTRAIT)
inLandscape = false;
}
问题是,在我的调试语句中,count始终为1,并且屏幕上的文本从不更改。做一些研究,我认为这是因为每次方向改变时,活动都会被破坏和重新创建。如何在整个方向更改过程中保持变量值
我试着用savedInstanceState和
if (savedInstanceState.containsKey("count"))
count = savedInstanceState.getInt("count");
savedInstanceState.putInt("count", count);
但这会在
containsKey
行中产生NullPointerException。覆盖onSaveInstanceState
以存储方向更改计数器
@Override
public void onSaveInstanceState(Bundle savedInstanceState) {
super.onSaveInstanceState(savedInstanceState);
savedInstanceState.putInt("count", count)
}
并重写onRestoreInstanceState以在更改后将其读回
@Override
public void onRestoreInstanceState(Bundle savedInstanceState) {
super.onRestoreInstanceState(savedInstanceState);
count = savedInstanceState.getInt("count");
}
显然,您仍然可以将代码保留在“onCreate”中的相同位置,以便根据每次调用onCreate时的方向有条件地添加到计数器中。这会给您一个NullPointerException,因为saveInstanceState为null。您还需要将
savedInstanceState.putInt(“count”,count)
放在onRestoreInstanceState
方法中。所以你的代码看起来像
int mCount;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
TextView tv = (TextView) findViewById(R.id.count);
mCount = 0;
tv.setText(getResources().getString(R.string.count) + ' ' + mCount);
}
@Override
public void onConfigurationChanged(Configuration newConfig) {
super.onConfigurationChanged(newConfig);
mCount++;
tv.setText(getResources().getString(R.string.count) + ' ' + count);
}
public void onRestoreInstanceState(Bundle savedInstanceState) {
// Always call the superclass so it can restore the view hierarchy
super.onRestoreInstanceState(savedInstanceState);
mCount = savedInstanceState.getInt("count");
}
@Override
public void onSaveInstanceState(Bundle savedInstanceState) {
savedInstanceState.putInt("count", mCount);
// Always call the superclass so it can save the view hierarchy state
super.onSaveInstanceState(savedInstanceState);
}
有关更多信息,请参阅和。请参阅以检测方向更改我不想在此项目中使用方向更改事件,因为我正在使用布局焊盘和布局端口文件。我宁愿让Android来处理方向的改变。