我是否点击保存或取消," savedDate"总是假的。知道怎么解决吗?
我对这个话题进行了很多研究。但没有解决我的问题:(另外,第一个MainActivity启动AnotherActivity,在onClick中,AnotherActivity启动MainActivity。
AnotherActivity.java:
@Override
public void onClick(View view)
{
switch (view.getId())
{
case R.id.SaveButton:
{
savedDate = true;
Intent intent = new Intent(getApplicationContext(), MainActivity.class);
intent.putExtra("savedDate", true);
startActivity(intent);
//m.HighlightCalendar();
}
case R.id.CancelButton:
{
savedDate = false;
Intent intent = new Intent(getApplicationContext(), MainActivity.class);
intent.putExtra("savedDate", false);
startActivity(intent);
}
}
}
MainActivity.java
@Override
protected void onResume()
{
super.onResume();
intent = getIntent();
// get my boolean from save button
savedDate = intent.getBooleanExtra("savedDate", true); // this code is not getting the boolean from Another Activity
// if i pressed my saved button
if(savedDate) {
//add date
DateList.add(selectDate);
for (int i = 0; i < DateList.size(); i++) {
events.add(DateList.get(i));
//update my calendar
calendarview.updateCalendar(events);
}
}
}
答案 0 :(得分:2)
我将首先假设您在未发布的代码中所做的事情。这些实际上都是基于这样一个事实,即您在onResume()
处理意图附加内容。
从MainActivity
开始AnotherActivity
执行某项操作。因此,当您从MainActivity
转到AnotherActivity
时,您将启动已创建的MainActivity
。在这种情况下,getIntent()
只返回用于创建未设置savedDate
的活动的原始意图。
如果您的配置允许,您可以使用onNewIntent()
请注意
getIntent()
仍会返回原始意图。您可以使用setIntent(Intent)
将其更新为此新Intent。
但更好的方法是使用startActivityForResult()
并执行setResult(RESULT_OK)
或setResult(RESULT_CANCELED)
和finish()
,而不是在onClick()
中使用新意图开始新活动。
答案 1 :(得分:2)
问题是您没有正确使用开关盒。您在第一个案例结尾处缺少break;
,因此它执行第二个案例陈述的正文。
答案 2 :(得分:0)
尝试:
boolean value = bundle.getBoolen("savedData");
然后:
Run
希望它有所帮助。
答案 3 :(得分:0)
@tynn有问题的核心:你在onResume中调用getIntent只会返回第一次用于启动你的活动的初始意图。
虽然我同意startActivityForResult是一种方法,但另一种方法是覆盖MainActivity中的onNewIntent并将处理按钮的逻辑放入该方法中:
@Override
public void onNewIntent(Intent intent) {
savedDate = intent.getBooleanExtra("savedDate", true); // this code is not getting the boolean from Another Activity
// if i pressed my saved button
if(savedDate) {
//add date
DateList.add(selectDate);
for (int i = 0; i < DateList.size(); i++) {
events.add(DateList.get(i));
//update my calendar
calendarview.updateCalendar(events);
}
}
这有点简单,最有可能实现你所需要的。
答案 4 :(得分:0)
在切换案例中添加break
。
case R.id.SaveButton:
{
savedDate = true;
Intent intent1 = new Intent(getApplicationContext(), MainActivity.class);
intent1.putExtra("savedDate", true);
startActivity(intent1);
//m.HighlightCalendar();
break;
}
case R.id.CancelButton:
{
savedDate = false;
Intent intent2 = new Intent(getApplicationContext(), MainActivity.class);
intent2.putExtra("savedDate", false);
startActivity(intent2);
braek;
}
在MainActivity中获取布尔值,就像这样..
Boolean savedDate = getIntent().getExtras().getBoolean("savedDate");
希望它有所帮助。