根据片段

时间:2017-04-19 06:34:10

标签: android menu android-actionbar

我有一个片段在adapter的帮助下显示列表。在列表中有一个链接点击,其中用户调用另一个调用适配器来获取数据的活动。获取数据后我们可以添加ata并保存在该适配器中用户片段1以保存数据。

。初衷我不希望菜单在fragment1中保存。一旦用户在列表的onclick中添加数据,就会打开另一个列表来添加数据并返回到fragment1然后我需要显示菜单保存.....我试过了。

@Override
public void onCreate(@Nullable Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setHasOptionsMenu(true);
}


@Override
public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) {
    inflater.inflate(R.menu.action_save, menu);
    shareItem = menu.findItem(R.id.action_save1);
    shareItem.setVisible(false);

}


 later based on condition i am doing   shareItem.setVisible(true);

4 个答案:

答案 0 :(得分:0)

在您的片段中覆盖onPrepareOptionsMenu()并根据您的条件隐藏该项

 @Override
public void onPrepareOptionsMenu(Menu menu) {
    MenuItem item=menu.findItem(R.id.action_save1);
    item.setVisible(false);
    super.onPrepareOptionsMenu(menu);
}

另请确保在setHasOptionsMenu(true);

中致电onCreate()

来自Documentation

  

boolean onPrepareOptionsMenu (Menu menu)准备屏幕标准   要显示的选项菜单。这是在菜单之前调用的   显示,每次显示。您可以有效地使用此方法   启用/禁用项目或以其他方式动态修改内容。

答案 1 :(得分:0)

在活动isShareItemVisible = true中添加布尔变量作为字段,然后在条件更改时将其设置为false并调用invalidateOptionsMenu();。在onCreateOptionsMenu方法中使用此变量,即:

@Override
public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) {
    inflater.inflate(R.menu.action_save, menu);
    shareItem = menu.findItem(R.id.action_save1);
    shareItem.setVisible(isShareItemVisible);
}

答案 2 :(得分:0)

在打开另一个列表之前,您可以将布尔值设置为true,当您再次返回到fragment1时,将调用setUserVisibleHint()方法,您可以检查该布尔值和isVisibleToUser变量值。如果两者都为真,那么您可以看到菜单项。

@Override  
public void setUserVisibleHint(boolean isVisibleToUser) {
        super.setUserVisibleHint(isVisibleToUser);
}

或者如果要打开另一个获取数据的活动,可以使用startActivityForResult()方法。将数据发送回活动时。它将被调用onActivityResult()。您可以在此处查看requestCode和所有片段startActivityForResult()方法。您可以在此处设置菜单项。

@Override
    protected void onActivityResult(int requestCode, int resultCode, Intent data) {
        super.onActivityResult(requestCode, resultCode, data);
        if (requestCode == 1001) {
            Fragment fragment1 = (Fragment) getSupportFragmentManager().findFragmentByTag(FRAGMENT_TAG);
            if (fragment1 != null) {
                fragment1 .onActivityResult(requestCode, resultCode, data);
            }
        }
    }

答案 3 :(得分:0)

当您开始另一项结果活动时,您可以使用startActivityForResult()。获取数据后,您可以启用菜单。 您可以在此处获取更多信息How to manage startActivityForResult on Android?

例如,当你开始活动时,设置结果代码为例1.然后在获取活动数据后,像这样完成第二个活动

Intent returnIntent = new Intent();
setResult(Activity.RESULT_OK,returnIntent);
finish();

在您的onActivityResult中,您可以检查结果是否正常,然后启用您的菜单。

@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
     if (requestCode == 1) {
            if(resultCode == Activity.RESULT_OK){
               //data is updated. 
             myitem.setvisiblity(true)
            }        
        }
    }