I have actionbar menuitems cancel and save.
menu.xml
<?xml version="1.0" encoding="utf-8"?>
<menu xmlns:android="http://schemas.android.com/apk/res/android" >
<item android:id="@+id/saveButton"
android:showAsAction="always"
android:title="@string/save"
android:visible="true">
</item>
<item android:id="@+id/cancelButton"
android:showAsAction="always"
android:title="@string/cancel"
android:visible="true">
</item>
</menu>
I want to disable save menuitem when activity is started.
My activity code -
@Override
protected void onCreate(Bundle savedInstanceState) {
// TODO Auto-generated method stub
super.onCreate(savedInstanceState);
setContentView(R.layout.add_project);
EditText projectName = (EditText) findViewById(R.id.editTextProjectName);
projectName.addTextChangedListener(new TextWatcher() {
@Override
public void onTextChanged(CharSequence s, int start, int before, int count) {
configureSaveButton(s);
}
@Override
public void beforeTextChanged(CharSequence s, int start, int count,int after) {}
@Override
public void afterTextChanged(Editable s) {}
});
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
MenuInflater inflater = getMenuInflater();
inflater.inflate(R.menu.addprojectmenu, menu);
return super.onCreateOptionsMenu(menu);
}
@Override
public boolean onPrepareOptionsMenu(Menu menu) {
MenuItem item = (MenuItem) findViewById(R.id.saveButton);
item.setEnabled(false);
return super.onPrepareOptionsMenu(menu);
}
private void configureSaveButton(CharSequence s){
String text = null;
if(s != null){
text = s.toString();
}
if(text != null && text.trim().length() != 0){
}else{
}
}
So what I am trying to do here is, initially when activity is started save menu item should be disabled and when editext contains some text then it should be enabled.
I am not sure what should be the code in if else in configureSaveButton method. Also how can i disable save menu item initially.
I get null pointer exception in onPrepareOptionsMenu.
I am using android 4.1
With this method, your menu item will be disabled each time your condition is checked, and will be enabled if not.
I found this post because I wanted to achieve the same result. None of the other answers were completely helpful in getting this to work for me. After some research and trial and error I got mine to work. So I decided to share my results.
Variables I created for this task:
Then set up the Actionbar Menu:
Since the variable
boolean b
is initialized as false thesave_btn
is disabled when the activity is created.Here is the method to toggle the
save_btn
using @OpenSourceRulzz example:This method is called through the
TextWatcher()
function for theEditText
box inonCreate()
again using @OpenSourceRulzz exampleThe last piece of the puzzle was adding the
invalidateOptionsMenu()
method.The part that I came up with that made mine work was using the
boolean b
variable to toggle the state of of thesave_btn
.After struggling for 1 hour after this stupid issue, the only solution that worked for me is:
store the Menu in a local variable:
Then change enabled status simply by calling:
And you can initially disable it just in the xml...
Just inflate it on prepare time and disable after inflated menu no need to
inflate
inoncreateoptionemenu
time or you can just use last two line of code after inflating fromonCreateOptionMenu
.