我有一个onOptionsItemSelected
方法,有两个按钮,允许我通过点击其中任何一个来改变孩子的价值。
一个按钮是“完成”而另一个按钮是“正在进行”。
我点击完整按钮,它正确地更改了子值,然后将值更改为“正在进行中”,甚至没有单击“正在进行中”按钮。
我找不到任何类似的问题,任何帮助将不胜感激。
@Override
public boolean onOptionsItemSelected(MenuItem item) {
switch (item.getItemId()) {
case R.id.complete:
Log.d(TAG, "Complete button tapped");
Intent intent = getIntent();
final String key = intent.getStringExtra("passKey");
status.setText(R.string.Complete);
DatabaseReference ref = database.child(key);
final DatabaseReference statusRefComplete = ref.child("Status");
statusRefComplete.setValue("Complete").addOnCompleteListener(new OnCompleteListener<Void>() {
@Override
public void onComplete(@NonNull Task<Void> task) {
if (task.isSuccessful()) {
Toast.makeText(edit_task.this, "Task Complete", Toast.LENGTH_SHORT).show();
}
}
});
case R.id.inprogress:
Log.d(TAG, "In-Progress button tapped");
Intent intent2 = getIntent();
final String key2 = intent2.getStringExtra("passKey");
status.setText(R.string.Inprogress);
DatabaseReference ref2 = database.child(key2);
final DatabaseReference statusRefInProgress = ref2.child("Status");
statusRefInProgress.setValue("In-Progress").addOnCompleteListener(new OnCompleteListener<Void>() {
@Override
public void onComplete(@NonNull Task<Void> task) {
if (task.isSuccessful()) {
Toast.makeText(edit_task.this, "Task In-Progress", Toast.LENGTH_SHORT).show();
}//if
}//OnComplete
});
}
return super.onOptionsItemSelected(item);
}
您忘记为每种情况添加break
:
@Override
public boolean onOptionsItemSelected(MenuItem item) {
...
switch (item.getItemId()) {
case R.id.complete:
....
break; // -> You must add this line.
case R.id.inprogress:
...
break; // -> You must add this line.
}
...
}
如果你不添加它,代码将执行R.id.complete
的代码,但它不会停止。它将继续执行并将运行R.id.inprogress
的代码。所以,只是“休息”点!