当调用getExtra时,布尔值会重置为false。

4
当我调用getExtras.getBoolean(key)方法获取isDeleted布尔值时,它总是将自己设置为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 - zozelfelfo
2
尝试这种方式:intent.getBooleanExtra("isDeleted",false); - Haresh Chhelana
1
提示:每次调用 getExtras() 都会创建一个 extras bundle 的克隆,因此这个操作相当昂贵。只需调用一次 getExtras() 或更好的方法是直接使用 getBooleanExtra()getIntExtra() 等。 - Yaroslav Mytkalyk
你的 switch case 中的变量 intent 在哪里被初始化了? - David Wasser
2个回答

8

有两种方法可以在一个活动中传递/获取数据到另一个活动。

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,如果我的答案解决了您的问题并对您有用,那么您可以批准并点赞我的答案。 - Haresh Chhelana
还没有任何声望。给你。 - Kai Tribble

4

有两种方法可以修复它,并且了解原因可能会在将来节省您的头痛。

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

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

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

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

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

你正在使用两者的混合,这意味着你试图从一个你没有实际设置的bundle中获取一个布尔值,因此它正在使用默认值(false)。


啊哈!所以在未来的情况下只需选择其中之一? - Kai Tribble
是的。这里需要注意的关键是,当您调用getIntent().getExtras().getBoolean(时,您正在设置一个bundle并读取bundle中的值,但为了使其工作,您需要传递一个bundle而不是布尔值 :) - Ben Pearson

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接