gpt4 book ai didi

android - 从异步任务接收数据后编辑选项菜单

转载 作者:太空狗 更新时间:2023-10-29 12:43:26 24 4
gpt4 key购买 nike

我正在我的应用中实现应用内结算服务。我在 onCreate() 中设置了对 IabHelper.queryInventoryAsync() 的调用以检索以前的购买。如果购买了商品,我将全局 bool 变量设置为 true。同时,在 onCreateOptionsMenu() 中,我检查该变量是否要删除 MenuItem。我的问题是 onCreateOptionsMenu(),正如预期的那样,有时会在异步任务完成设置我的 bool 变量之前被调用。我需要一个解决方案来告诉 onCreateOptionsMenu() 等待该任务设置 bool 值,以便它可以相应地创建菜单。下面是详细的代码:

@Override
protected void onCreate(Bundle savedInstanceState) {

//other stuff...

helper.queryInventoryAsync(new IabHelper.QueryInventoryFinishedListener() {
public void onQueryInventoryFinished(IabResult result,
Inventory inventory) {

if (result.isFailure()) {
// handle error here
return;
}

if (inventory.hasPurchase(REMOVE_ADS_SKU)) {
//item purchased. set control variable
isNoAds = true;
}

}
});
}

@Override
public boolean onCreateOptionsMenu(final Menu menu) {

getMenuInflater().inflate(R.menu.main, menu);

//if the control variable is true, remove the option to buy ad-free version
if (isNoAds) menu.removeItem(R.id.action_remove_ads);

return super.onCreateOptionsMenu(menu);
}

最佳答案

我发现最可靠的方法是使整个菜单无效。因此,当您获得异步结果时(在 onQueryInventoryFinished 中)只需调用:

invalidateOptionsMenu();

或者,如果您使用的是 FragmentActivity(SherlockFragmentActivityActionBarActivity)

supportInvalidateOptionsMenu();

通过这种方式,将重新创建菜单,您可以根据需要安全地添加或删除项目。

关于android - 从异步任务接收数据后编辑选项菜单,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21811947/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com