我正在制作一个计算器(这些位没有显示在下面的代码中)我在应用程序的底部有一个工具栏,我可以从菜单中切换它的可见性。这是我目前的MainActivity类:
public class MainActivity extends Activity implements OnClickListener {
public Toolbar toolbar_btm;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
toolbar_btm = findViewById(R.id.toolbar_bottom);
}
@Override
protected void onSaveInstanceState(Bundle outState) {
super.onSaveInstanceState(outState);
//Toolbar toolbar_btm = findViewById(R.id.toolbar_bottom);
outState.putInt("TOOLBAR_VISIBLE", toolbar_btm.getVisibility());
}
@Override
protected void onRestoreInstanceState(Bundle savedInstanceState) {
super.onRestoreInstanceState(savedInstanceState);
//Toolbar toolbar_btm = findViewById(R.id.toolbar_bottom);
toolbar_btm.setVisibility(savedInstanceState.getInt("TOOLBAR_VISIBLE"));
}
//Toggles the toolbar to show/hide
@Override
public boolean onOptionsItemSelected(MenuItem item) {
switch (item.getItemId()) {
case R.id.toolbar_toggle:
Toolbar toolbar_btmtog = findViewById(R.id.toolbar_bottom);
if (toolbar_btmtog.getVisibility() == View.GONE)
toolbar_btmtog.setVisibility(View.VISIBLE);
else if (toolbar_btmtog.getVisibility() == View.VISIBLE)
toolbar_btmtog.setVisibility(View.GONE);
return true;
default:
return super.onOptionsItemSelected(item);
}
}
}
然而,我似乎无法在内存中保持这种可见/消失状态。我尝试过使用onSaveInstanceState和onRestoreInstanceState,但是当我运行我的代码时,它会抛出以下异常:
java.lang.RuntimeException: Unable to start activity
ComponentInfo{com.example.calculator/com.example.calculator.MainActivity}:
java.lang.NullPointerException: Attempt to invoke virtual method 'void
android.widget.Toolbar.setVisibility(int)' on a null object reference
我根本无法弄清楚问题是什么。我正在使用putInt
和getInt
,我正在使用正确的名称声明工具栏。那么,为什么我得到一个空对象引用?
答案 0 :(得分:1)
您没有分配工具栏变量。选择菜单选项后,您正在使用本地选项。将此代码放在onCreate()
:
toolbar_btm = findViewById(R.id.toolbar_bottom);
答案 1 :(得分:1)
toolbar_btm
的变量。一个是全局的,未分配的,另一个是onOptionsItemSelected(MenuItem item)
。该局部变量“覆盖”局部变量(在函数中)您应该将工具栏声明为全局,然后在OnCreate()
中指定其值,如果不起作用,则在重写的函数OnResume()
中指定。您可以第二次使用Toolbar
关键字通过非分配值,就像这样。
toolbar_btm = findViewById(R.id.toolbar_bottom);
<强>更新强>
ActionBar actionBar = getActionBar(); if(actionBar.isShowing()) actionBar.hide(); else actionBar.show(); this.invalidateOptionsMenu();