Android 调用getExtra时,布尔值将自身重置为false

Android 调用getExtra时,布尔值将自身重置为false,android,android-intent,boolean,Android,Android Intent,Boolean,当我为isDeleted boolean调用getExtras.getBoolean(key)时,它会将自身设置为false,即使我传递的是true。关于为什么会发生这种情况有什么见解吗?我尝试了很多其他方法,但没有成功地保持布尔值为真 其他活动: public void deleteWorkout(View view) { intent.putExtra("listPosition", intent.getExtras().getInt("position"));

当我为isDeleted boolean调用getExtras.getBoolean(key)时,它会将自身设置为false,即使我传递的是true。关于为什么会发生这种情况有什么见解吗?我尝试了很多其他方法,但没有成功地保持布尔值为真

其他活动:

   public void deleteWorkout(View view)
    {
        intent.putExtra("listPosition", intent.getExtras().getInt("position"));
        intent.putExtra("isDeleted", true);
        setResult(RESULT_OK, intent);
        finish();
    }
case(List): {
                if(resCode == Activity.RESULT_OK)
                {
                    boolean isDeleted = intent.getExtras().getBoolean("isDeleted");
                    int listPosition = intent.getExtras().getInt("listPosition");
                    if(isDeleted)
                    {
                        adapter.remove(workoutList.get(listPosition));
                        adapter.notifyDataSetChanged();
                    }
                }
            }
            default:
                break;
            }
主要活动:

   public void deleteWorkout(View view)
    {
        intent.putExtra("listPosition", intent.getExtras().getInt("position"));
        intent.putExtra("isDeleted", true);
        setResult(RESULT_OK, intent);
        finish();
    }
case(List): {
                if(resCode == Activity.RESULT_OK)
                {
                    boolean isDeleted = intent.getExtras().getBoolean("isDeleted");
                    int listPosition = intent.getExtras().getInt("listPosition");
                    if(isDeleted)
                    {
                        adapter.remove(workoutList.get(listPosition));
                        adapter.notifyDataSetChanged();
                    }
                }
            }
            default:
                break;
            }

有两种方法可以解决这个问题,并且理解为什么在将来可能会再次让你头痛

putExtras
putExtra
不同。 那么有什么区别呢

putExtras
希望传入一个包。使用此方法时,您需要使用以下方法将数据拉回:

getIntent().getExtras().getBoolean("isDeleted");
getIntent.getBooleanExtra("isDeleted", false); // false is the default
putExtra需要一个字符串名和一个布尔值。使用此方法时,您需要使用以下方法将数据拉回:

getIntent().getExtras().getBoolean("isDeleted");
getIntent.getBooleanExtra("isDeleted", false); // false is the default

您使用的是两者的混合,这意味着您试图从未实际设置的捆绑包中获取布尔值,因此它使用默认值(false)。

有两种方式将数据从一个活动传递到另一个活动

1.将数据添加到意图中

如何放置:

intent.putExtra("listPosition", intent.getExtras().getInt("position"));
intent.putExtra("isDeleted", true);
Bundle bundle = new Bundle();
bundle.putExtra("listPosition", intent.getExtras().getInt("position"));
bundle.putExtra("isDeleted", true);
intent.putExtras(bundle)
如何获得:

int listPosition = getIntent().getIntExtra("listPosition",0);
boolean isDeleted = getIntent().getBooleanExtra("isDeleted",false);
int listPosition = getIntent().getExtras().getInt("listPosition",0);
boolean isDeleted = getIntent().getExtras().getBoolean("isDeleted",false);
2.将数据添加到bundle,并将bundle添加到intent

如何放置:

intent.putExtra("listPosition", intent.getExtras().getInt("position"));
intent.putExtra("isDeleted", true);
Bundle bundle = new Bundle();
bundle.putExtra("listPosition", intent.getExtras().getInt("position"));
bundle.putExtra("isDeleted", true);
intent.putExtras(bundle)
如何获得:

int listPosition = getIntent().getIntExtra("listPosition",0);
boolean isDeleted = getIntent().getBooleanExtra("isDeleted",false);
int listPosition = getIntent().getExtras().getInt("listPosition",0);
boolean isDeleted = getIntent().getExtras().getBoolean("isDeleted",false);

尝试使用
getBooleanExtra
getIntExtra
尝试以下方法:intent.getBooleanExtra(“isDeleted”,false);提示:无论何时调用
getExtras()
它都会创建extras捆绑包的克隆,因此此操作成本相当高。只调用
getExtras()
一次或更好只需使用
getBooleanExtra()
getIntExtra()
等。在
开关盒中的变量
intent
在哪里初始化?啊哈!所以,在未来的情况下,只需选择一个或另一个?是的。这里的关键是要注意,当您调用
getIntent().getExtras().getBoolean(
)时,您正在设置一个bundle,然后读取bundle中的一个值,但要使其工作,您需要传递一个bundle而不是boolean:@user3101180,如果我的ans能够解决你的问题并对你有用,那么你可以批准并投票给我的ans。我还没有任何业力。干得好