我们如何像在 onCreate() 中那样在 onOptionItemSelected 之外使用菜单项
How can we use menu items outside onOptionItemSelected like in onCreate()
我在获取对 onOptionsItemSelected()
方法之外的菜单项的引用时遇到问题。我希望在创建 Activity
后立即执行该部分代码,因此我尝试在 onCreate()
中使用该菜单项,但它总是返回 null
。任何帮助将不胜感激。
我正在尝试以下代码:
private Menu menu;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_sub_task_detail);
updateMenu();
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu; this adds items to the action bar if it is present.
getMenuInflater().inflate(R.menu.menu_sub_task_detail, menu);
this.menu = menu;
menuItem = menu.findItem(R.id.markComplete);
return true;
}
public void updateMenu(){
menuItem = menu.findItem(R.id.markComplete);
SharedPreferences sharedPreferences1 = getSharedPreferences("StatusValue", Context.MODE_PRIVATE);
int count2 = sharedPreferences1.getInt("status", 0);
if (count2 != 0){
menuItem.setEnabled(false);
}
else {
menuItem.setEnabled(true);
}
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
// Handle action bar item clicks here. The action bar will
// automatically handle clicks on the Home/Up button, so long
// as you specify a parent activity in AndroidManifest.xml.
SharedPreferences sharedPreferences1 = getSharedPreferences("StatusValue", Context.MODE_PRIVATE);
int count2 = sharedPreferences1.getInt("status", 0);
if (count2 != 0){
menuItem.setEnabled(false);
}
int id = item.getItemId();
//noinspection SimplifiableIfStatement
if (id == R.id.action_settings) {
return true;
}
if (id == R.id.markComplete) {
SQLiteDataBaseAdapter db = new SQLiteDataBaseAdapter(this);
String taskname = task_name.getText().toString();
int subTaskNumber1 = db.getSubTaskUID(taskname);
int taskNumber = db.getTaskUID(position1);
Log.d("Pana", "The value of Sub Task Number is " +subTaskNumber1);
Long result = db.updateUserTable(1, subTaskNumber1, taskNumber);
//Toast.makeText(this, "The value of result is " + result, Toast.LENGTH_LONG).show();
// getting current Date and Time
Calendar c = Calendar.getInstance();
SimpleDateFormat df1 = new SimpleDateFormat("MM/dd/yyyy HH:mm");
String formattedDate = df1.format(c.getTime());
// formattedDate have current date/time
Log.d("Pana", "Formatted Date is " + formattedDate);
String[] dateTimeSplit = formattedDate.split(" ");
String currDate = dateTimeSplit[0];
String currTime = dateTimeSplit[1];
subTask = db.getSubTask(position);
String subTaskName = subTask.getSub_Task_Name();
int UID = db.getSubTaskUID(subTaskName);
db.updateEstCompTimeDateSubTask(UID, currTime, currDate);
String[] actTimeDate = db.getActTimeDateSubTask(taskname);
String actTime = actTimeDate[0];
String actDate = actTimeDate[1];
act_compDate.setText(actTime);
act_compTime.setText(actDate);
int count = db.checkOtherSubTask(taskNumber);
if (count == 0){
Toast.makeText(this, "There are no active Sub Tasks for the corresponding Task. Please create a new Sub Task or mark the corresponding task as completed", Toast.LENGTH_LONG).show();
}
int count1 = db.getStatus(taskNumber, subTaskNumber1);
SharedPreferences sharedPreferences = getSharedPreferences("StatusValue", Context.MODE_PRIVATE);
SharedPreferences.Editor editor = sharedPreferences.edit();
editor.putInt("status", count1);
editor.commit();
if (count1 != 0) {
item.setEnabled(false);
}
}
return super.onOptionsItemSelected(item);
}
我想在我的 onCreate 方法中设置 ID 为 R.id.markComplete 的项目,但我无法获得对该项目的引用。欢迎所有建议。提前致谢。
不宜为所欲为。当您 可以 创建一个 class 字段时
private Menu menu;
并在 onCreateOptionsMenu()
中捕获它的值
this.menu = menu;
众所周知,menu
的值在 Activity
/ Fragment
生命周期的某些点突然变为 null
。因此,建议您在 onCreateOptionsMenu()
、onPrepareOptionsMenu()
和 onOptionsItemSelected()
方法中使用 menu
做任何您想做的事情。这些方法是正确的地方。
参考文献:
1. Menus.
我在获取对 onOptionsItemSelected()
方法之外的菜单项的引用时遇到问题。我希望在创建 Activity
后立即执行该部分代码,因此我尝试在 onCreate()
中使用该菜单项,但它总是返回 null
。任何帮助将不胜感激。
我正在尝试以下代码:
private Menu menu;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_sub_task_detail);
updateMenu();
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu; this adds items to the action bar if it is present.
getMenuInflater().inflate(R.menu.menu_sub_task_detail, menu);
this.menu = menu;
menuItem = menu.findItem(R.id.markComplete);
return true;
}
public void updateMenu(){
menuItem = menu.findItem(R.id.markComplete);
SharedPreferences sharedPreferences1 = getSharedPreferences("StatusValue", Context.MODE_PRIVATE);
int count2 = sharedPreferences1.getInt("status", 0);
if (count2 != 0){
menuItem.setEnabled(false);
}
else {
menuItem.setEnabled(true);
}
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
// Handle action bar item clicks here. The action bar will
// automatically handle clicks on the Home/Up button, so long
// as you specify a parent activity in AndroidManifest.xml.
SharedPreferences sharedPreferences1 = getSharedPreferences("StatusValue", Context.MODE_PRIVATE);
int count2 = sharedPreferences1.getInt("status", 0);
if (count2 != 0){
menuItem.setEnabled(false);
}
int id = item.getItemId();
//noinspection SimplifiableIfStatement
if (id == R.id.action_settings) {
return true;
}
if (id == R.id.markComplete) {
SQLiteDataBaseAdapter db = new SQLiteDataBaseAdapter(this);
String taskname = task_name.getText().toString();
int subTaskNumber1 = db.getSubTaskUID(taskname);
int taskNumber = db.getTaskUID(position1);
Log.d("Pana", "The value of Sub Task Number is " +subTaskNumber1);
Long result = db.updateUserTable(1, subTaskNumber1, taskNumber);
//Toast.makeText(this, "The value of result is " + result, Toast.LENGTH_LONG).show();
// getting current Date and Time
Calendar c = Calendar.getInstance();
SimpleDateFormat df1 = new SimpleDateFormat("MM/dd/yyyy HH:mm");
String formattedDate = df1.format(c.getTime());
// formattedDate have current date/time
Log.d("Pana", "Formatted Date is " + formattedDate);
String[] dateTimeSplit = formattedDate.split(" ");
String currDate = dateTimeSplit[0];
String currTime = dateTimeSplit[1];
subTask = db.getSubTask(position);
String subTaskName = subTask.getSub_Task_Name();
int UID = db.getSubTaskUID(subTaskName);
db.updateEstCompTimeDateSubTask(UID, currTime, currDate);
String[] actTimeDate = db.getActTimeDateSubTask(taskname);
String actTime = actTimeDate[0];
String actDate = actTimeDate[1];
act_compDate.setText(actTime);
act_compTime.setText(actDate);
int count = db.checkOtherSubTask(taskNumber);
if (count == 0){
Toast.makeText(this, "There are no active Sub Tasks for the corresponding Task. Please create a new Sub Task or mark the corresponding task as completed", Toast.LENGTH_LONG).show();
}
int count1 = db.getStatus(taskNumber, subTaskNumber1);
SharedPreferences sharedPreferences = getSharedPreferences("StatusValue", Context.MODE_PRIVATE);
SharedPreferences.Editor editor = sharedPreferences.edit();
editor.putInt("status", count1);
editor.commit();
if (count1 != 0) {
item.setEnabled(false);
}
}
return super.onOptionsItemSelected(item);
}
我想在我的 onCreate 方法中设置 ID 为 R.id.markComplete 的项目,但我无法获得对该项目的引用。欢迎所有建议。提前致谢。
不宜为所欲为。当您 可以 创建一个 class 字段时
private Menu menu;
并在 onCreateOptionsMenu()
this.menu = menu;
众所周知,menu
的值在 Activity
/ Fragment
生命周期的某些点突然变为 null
。因此,建议您在 onCreateOptionsMenu()
、onPrepareOptionsMenu()
和 onOptionsItemSelected()
方法中使用 menu
做任何您想做的事情。这些方法是正确的地方。
参考文献:
1. Menus.