android 根据片段条件显示/隐藏菜单

2ic8powd  于 2023-02-11  发布在  Android
关注(0)|答案(4)|浏览(147)

我有一个显示列表的片段,在www.example.com列表的帮助下adapter.in,有一个链接单击,用户在其中调用另一个调用适配器的活动以获取数据。获取数据后,我们可以添加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);

}

后来基于我正在做的条件:shareItem.setVisible(true);

iszxjhcz

iszxjhcz1#

当您开始另一个活动以获取结果时,您可以使用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)
            }        
        }
    }
piv4azn7

piv4azn72#

在活动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);
}
xytpbqjk

xytpbqjk3#

在您的片段中重写onPrepareOptionsMenu()并根据您的条件隐藏项目

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

此外,请确保在onCreate()中调用setHasOptionsMenu(true);
来自文件
boolean onPrepareOptionsMenu (Menu menu)准备要显示的屏幕标准选项菜单。每次显示菜单时,都会在菜单显示之前调用此方法。您可以使用此方法有效地启用/禁用项目或动态修改内容。

jaql4c8m

jaql4c8m4#

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

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

或者,如果您正在打开另一个Activity获取数据,您可以使用startActivityForResult()方法。当您将数据发送回Activity时,将调用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);
            }
        }
    }

相关问题