Intent.getBooleanExtra始终返回true

时间:2016-07-08 21:16:49

标签: android

我是否点击保存或取消," 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);
            }
        }
    }

5 个答案:

答案 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");

希望它有所帮助。