尝试隐藏 Actionbar 项目时获取 NullPointerException
Getting NullPointerException when trying to hide Actionbar item
当我想从我的 Actionbar 中隐藏一个 Action Button 时,我收到了 NullPointerException。
我有一个简单的 Actionbar 和一个 Navigationdrawer。
我只是想在使用登录对话框成功登录时隐藏操作栏右上角的操作登录按钮。
NavigationDrawerFragment:
@Override
public boolean onOptionsItemSelected(MenuItem item)
{
FragmentManager fragmentManager = getFragmentManager();
Log.d("test12","onOptionsItemSelected");
if (mDrawerToggle.onOptionsItemSelected(item))
{
Log.d("test12_1","onOptionsItemSelected");
return true;
}
if (item.getItemId() == R.id.action_login)
{
Log.d("test13", "onOptionItemSelected");
//Toast.makeText(getActivity(), "Example action.", Toast.LENGTH_SHORT).show();
final Dialog dialog = new Dialog(getActivity());
dialog.setContentView(R.layout.login);
dialog.setTitle(R.string.title_login);
login_button = (Button) dialog.findViewById(R.id.button_login);
username = (EditText) dialog.findViewById(R.id.et_username);
password = (EditText) dialog.findViewById(R.id.et_password);
login_button.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v)
{
Log.d("test14", "Login Button geklickt");
if (username.getText().toString().equals("root") && password.getText().toString().equals("root")) {
Toast.makeText(getActivity(), "Hello " + username.getText(), Toast.LENGTH_LONG).show();
login_status = true;
updateAfterLogin(); // Updated die Seitenleiste
getActivity().supportInvalidateOptionsMenu(); // reload Actionbar to hide Symbol
mDrawerLayout.openDrawer(Gravity.START); // Öffnet den Navigationdrawer
dialog.dismiss();
}
else
{
Toast.makeText(getActivity(), "Wrong Username or Password!", Toast.LENGTH_SHORT).show();
}
}
});
dialog.show();
return true;
}
return super.onOptionsItemSelected(item);
}
错误出现在行:
if(login_status == true)
{
menu.findItem(R.id.action_login).setVisible(false);
}
@Override
public void onCreateOptionsMenu(Menu menu, MenuInflater inflater)
{
Log.d("test11", "onCreateOptionsMenu");
// If the drawer is open, show the global app actions in the action bar. See also
// showGlobalContextActionBar, which controls the top-left area of the action bar.
if (mDrawerLayout != null && isDrawerOpen()) {
inflater.inflate(R.menu.global, menu);
showGlobalContextActionBar();
}
if(login_status == true)
{
menu.findItem(R.id.action_login).setVisible(false);
}
super.onCreateOptionsMenu(menu, inflater);
}
错误:
02-26 23:07:14.548 13034-13034/com.example.vo1umen.kimasys E/AndroidRuntime﹕ FATAL EXCEPTION: main
Process: com.example.vo1umen.kimasys, PID: 13034
java.lang.NullPointerException: Attempt to invoke interface method 'android.view.MenuItem android.view.MenuItem.setVisible(boolean)' on a null object reference
at com.example.vo1umen.kimasys.NavigationDrawerFragment.onCreateOptionsMenu(NavigationDrawerFragment.java:408)
at android.support.v4.app.Fragment.performCreateOptionsMenu(Fragment.java:1868)
at android.support.v4.app.FragmentManagerImpl.dispatchCreateOptionsMenu(FragmentManager.java:1989)
at android.support.v4.app.FragmentActivity.onCreatePanelMenu(FragmentActivity.java:276)
at android.support.v7.app.ActionBarActivity.superOnCreatePanelMenu(ActionBarActivity.java:276)
at android.support.v7.app.ActionBarActivityDelegate.onCreatePanelMenu(ActionBarActivityDelegate.java:79)
at android.support.v7.app.ActionBarActivityDelegateBase.preparePanel(ActionBarActivityDelegateBase.java:979)
at android.support.v7.app.ActionBarActivityDelegateBase.doInvalidatePanelMenu(ActionBarActivityDelegateBase.java:1182)
at android.support.v7.app.ActionBarActivityDelegateBase.access0(ActionBarActivityDelegateBase.java:79)
at android.support.v7.app.ActionBarActivityDelegateBase.run(ActionBarActivityDelegateBase.java:115)
at android.view.Choreographer$CallbackRecord.run(Choreographer.java:792)
at android.view.Choreographer.doCallbacks(Choreographer.java:596)
at android.view.Choreographer.doFrame(Choreographer.java:556)
at android.view.Choreographer$FrameDisplayEventReceiver.run(Choreographer.java:778)
at android.os.Handler.handleCallback(Handler.java:739)
at android.os.Handler.dispatchMessage(Handler.java:95)
at android.os.Looper.loop(Looper.java:155)
at android.app.ActivityThread.main(ActivityThread.java:5696)
at java.lang.reflect.Method.invoke(Native Method)
at java.lang.reflect.Method.invoke(Method.java:372)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1028)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:823)
未找到 action_login
菜单项。检查您的 R.menu.global
xml 文件,该项目不在其中。
当我想从我的 Actionbar 中隐藏一个 Action Button 时,我收到了 NullPointerException。 我有一个简单的 Actionbar 和一个 Navigationdrawer。 我只是想在使用登录对话框成功登录时隐藏操作栏右上角的操作登录按钮。
NavigationDrawerFragment:
@Override
public boolean onOptionsItemSelected(MenuItem item)
{
FragmentManager fragmentManager = getFragmentManager();
Log.d("test12","onOptionsItemSelected");
if (mDrawerToggle.onOptionsItemSelected(item))
{
Log.d("test12_1","onOptionsItemSelected");
return true;
}
if (item.getItemId() == R.id.action_login)
{
Log.d("test13", "onOptionItemSelected");
//Toast.makeText(getActivity(), "Example action.", Toast.LENGTH_SHORT).show();
final Dialog dialog = new Dialog(getActivity());
dialog.setContentView(R.layout.login);
dialog.setTitle(R.string.title_login);
login_button = (Button) dialog.findViewById(R.id.button_login);
username = (EditText) dialog.findViewById(R.id.et_username);
password = (EditText) dialog.findViewById(R.id.et_password);
login_button.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v)
{
Log.d("test14", "Login Button geklickt");
if (username.getText().toString().equals("root") && password.getText().toString().equals("root")) {
Toast.makeText(getActivity(), "Hello " + username.getText(), Toast.LENGTH_LONG).show();
login_status = true;
updateAfterLogin(); // Updated die Seitenleiste
getActivity().supportInvalidateOptionsMenu(); // reload Actionbar to hide Symbol
mDrawerLayout.openDrawer(Gravity.START); // Öffnet den Navigationdrawer
dialog.dismiss();
}
else
{
Toast.makeText(getActivity(), "Wrong Username or Password!", Toast.LENGTH_SHORT).show();
}
}
});
dialog.show();
return true;
}
return super.onOptionsItemSelected(item);
}
错误出现在行:
if(login_status == true) { menu.findItem(R.id.action_login).setVisible(false); }
@Override
public void onCreateOptionsMenu(Menu menu, MenuInflater inflater)
{
Log.d("test11", "onCreateOptionsMenu");
// If the drawer is open, show the global app actions in the action bar. See also
// showGlobalContextActionBar, which controls the top-left area of the action bar.
if (mDrawerLayout != null && isDrawerOpen()) {
inflater.inflate(R.menu.global, menu);
showGlobalContextActionBar();
}
if(login_status == true)
{
menu.findItem(R.id.action_login).setVisible(false);
}
super.onCreateOptionsMenu(menu, inflater);
}
错误:
02-26 23:07:14.548 13034-13034/com.example.vo1umen.kimasys E/AndroidRuntime﹕ FATAL EXCEPTION: main
Process: com.example.vo1umen.kimasys, PID: 13034
java.lang.NullPointerException: Attempt to invoke interface method 'android.view.MenuItem android.view.MenuItem.setVisible(boolean)' on a null object reference
at com.example.vo1umen.kimasys.NavigationDrawerFragment.onCreateOptionsMenu(NavigationDrawerFragment.java:408)
at android.support.v4.app.Fragment.performCreateOptionsMenu(Fragment.java:1868)
at android.support.v4.app.FragmentManagerImpl.dispatchCreateOptionsMenu(FragmentManager.java:1989)
at android.support.v4.app.FragmentActivity.onCreatePanelMenu(FragmentActivity.java:276)
at android.support.v7.app.ActionBarActivity.superOnCreatePanelMenu(ActionBarActivity.java:276)
at android.support.v7.app.ActionBarActivityDelegate.onCreatePanelMenu(ActionBarActivityDelegate.java:79)
at android.support.v7.app.ActionBarActivityDelegateBase.preparePanel(ActionBarActivityDelegateBase.java:979)
at android.support.v7.app.ActionBarActivityDelegateBase.doInvalidatePanelMenu(ActionBarActivityDelegateBase.java:1182)
at android.support.v7.app.ActionBarActivityDelegateBase.access0(ActionBarActivityDelegateBase.java:79)
at android.support.v7.app.ActionBarActivityDelegateBase.run(ActionBarActivityDelegateBase.java:115)
at android.view.Choreographer$CallbackRecord.run(Choreographer.java:792)
at android.view.Choreographer.doCallbacks(Choreographer.java:596)
at android.view.Choreographer.doFrame(Choreographer.java:556)
at android.view.Choreographer$FrameDisplayEventReceiver.run(Choreographer.java:778)
at android.os.Handler.handleCallback(Handler.java:739)
at android.os.Handler.dispatchMessage(Handler.java:95)
at android.os.Looper.loop(Looper.java:155)
at android.app.ActivityThread.main(ActivityThread.java:5696)
at java.lang.reflect.Method.invoke(Native Method)
at java.lang.reflect.Method.invoke(Method.java:372)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1028)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:823)
未找到 action_login
菜单项。检查您的 R.menu.global
xml 文件,该项目不在其中。