【问题标题】:Boolean resets itself to false when getExtra is called调用 getExtra 时,布尔值将自身重置为 false
【发布时间】:2014-11-11 09:04:56
【问题描述】:

当我为我的 isDeleted 布尔值调用 getExtras.getBoolean(key) 时,它一直将自己设置为 false,即使我传入的是 true。关于为什么会发生这种情况的任何见解?我尝试了很多其他方法,但未能成功保持布尔值 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;
            }

【问题讨论】:

  • 尝试使用getBooleanExtragetIntExtra
  • 试试这个方法:intent.getBooleanExtra("isDeleted",false);
  • 提示:每当您调用getExtras() 时,它都会创建额外包的克隆,因此此操作相当昂贵。只调用一次getExtras(),或者最好只使用getBooleanExtra()getIntExtra()等。
  • 你的switch case中的变量intent在哪里被初始化?

标签: android android-intent boolean


【解决方案1】:

有两种方式将数据传递/获取一个活动到另一个活动。

1.向意图添加数据。

怎么放:

intent.putExtra("listPosition", intent.getExtras().getInt("position"));
intent.putExtra("isDeleted", true);

如何获得:

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

2.将数据添加到bundle并将bundle添加到intent。

怎么放:

Bundle bundle = new Bundle();
bundle.putExtra("listPosition", intent.getExtras().getInt("position"));
bundle.putExtra("isDeleted", true);
intent.putExtras(bundle)

如何获得:

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

【讨论】:

  • @user3101180,如果我的回答能解决您的问题并且对您有用,那么您可以批准并支持我的回答。
  • 还没有业力。给你
【解决方案2】:

有两种方法可以解决此问题,并了解为什么将来可能会再次让您头疼。

putExtrasputExtra 不同。 那么有什么区别呢?

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

getIntent().getExtras().getBoolean("isDeleted");

putExtra 将期望(在您的情况下)一个字符串名称和一个布尔值。使用此方法时,您需要使用以下方法将数据拉回:

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

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

【讨论】:

  • 啊哈!所以在未来的情况下,只选择其中之一?
  • 是的。这里的关键是要注意,当您调用 getIntent().getExtras().getBoolean( 时,您正在设置一个捆绑包,然后读取捆绑包中的一个值,但要使其正常工作,您需要传递一个捆绑包而不是布尔值 :)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-01-18
  • 2016-06-24
  • 1970-01-01
  • 1970-01-01
  • 2020-06-23
  • 2014-07-03
相关资源
最近更新 更多