2017-04-19 45 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