2017-04-19 47 views
1

我有一个片段,显示列表的帮助adapter.in列表中有一个链接点击在哪个用户调用另一个活动,调用适配器来获取数据。获取数据后,我们可以添加ata并保存在该适配器中,这会将用户指向片段1以保存数据。菜单显示/隐藏基于片段的条件

。最初我不想要菜单作为保存在fragment1中。一旦用户添加数据在onclick列表ehich打开anotherlist添加数据并返回到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

你得到了什么? – Wizard

+0

确实anotherList返回一些值给你的fragment1 ?? – CodeCameo

+0

是的,它返回对象 – sanjana

回答

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)准备屏幕要显示的标准 选项菜单。这在每次显示菜单为 之前被调用。您可以使用此方法高效地启用/禁用项目或以其他方式动态修改内容。

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); 
} 
0

打开另一个列表,你可以一个布尔值设置为true,当你回到片段1再次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); 
      } 
     } 
    } 
+0

我开始使用startactivity reult的活动,我说像myitem.setvisiblity(true);但没有工作。 – sanjana

+0

你是否在'onActivityResult()'方法中设置了可见性? – CodeCameo

+0

yes if(nestedhashmap.linkgarmentdata!= null){ shareItem.setVisible(true); – sanjana

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) 
      }   
     } 
    } 
+0

我使用这种方法只对活动结果我检查像id数据添加!= 0意味着然后setvisibity(true);但不工作 – sanjana

+0

@sanjan请检查更新的答案。 – androidcodehunter