其他分享
首页 > 其他分享> > android-从异步任务接收数据后,编辑选项菜单

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

作者:互联网

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

@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(SherlockFragmentActivity或ActionBarActivity)

supportInvalidateOptionsMenu();

这样,将重新创建菜单,您可以根据需要安全地添加或删除项目.

标签:android-optionsmenu,in-app-purchase,android
来源: https://codeday.me/bug/20191122/2057102.html