我有一个片段在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);
答案 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()
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)
}
}
}