2017-04-19 26 views
1

私はadapter.inリストのヘルプでリストを表示するフラグメントを1つ持っています。ユーザーがデータを取得するためにアダプタを呼び出すリンクをクリックするリンクがあります。アダプタを追加してアダプタに保存すると、フラグメント1にユーザがデータを保存するよう指示されます。フラグメントの条件に基づいて表示/非表示

。初めに、私は、フラグメント1の保存としてメニューを欲しません。ユーザーがリストのonclickにデータを追加すると、別のリストが開き、フラグメント1に戻ります。 。あなたのフラグメントで

@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

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

あなたはDocumentation

boolean onPrepareOptionsMenu (Menu menu)準備からonCreate()

setHasOptionsMenu(true);を呼び出すことを確認してくださいあなたの条件に基づいて項目をonPrepareOptionsMenu()を無効にして隠しますスクリーン標準の オプションメニューが表示されます。これは、メニューが表示される度に、 が表示される直前に呼び出されます。この方法を使用して、効率的に を有効/無効にしたり、内容を動的に変更することができます。

0

条件が変更されたとき、その後falseに設定してinvalidateOptionsMenu();を呼び出し、活動isShareItemVisible = trueにフィールドとしてブール変数を追加します。 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

別のリストを開く前に、あなたは真のブール値を設定することができますし、再びfragment1に取得するときにsetUserVisibleHint()メソッドが呼び出されます、あなたはそのboolean値を確認​​することができます変数値は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

を返す私はmytem.setvisiblity(真)のように言っているreultのためにstartactivityを使用して活動を開始しています。しかし働かなかった。 – sanjana

+0

あなたは 'onActivityResult()'メソッドから可視性を設定していますか? – CodeCameo

+0

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

0

結果として別のアクティビティを開始しているので、startActivityForResult()を使用できます。データを取得したら、メニューを有効にすることができます。 ここであなたは活動が活動データを取得した後、次に例1の結果コードを設定して起動したときに、例えば、より多くの情報How to manage startActivityForResult on Android?

を取得し、このよう

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

状の第2の活動を終了し、することができますonActivityResultでは、結果がOKかどうかを確認してメニューを有効にすることができます。

@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

@サンジャン更新された答えを確認してください。 – androidcodehunter

関連する問題