2016-07-09 5 views
0

私は、3つのフラグメントをサポートするタブホストとViewPagerを持つアクティビティを持っています。私は、それぞれのフラグメントでActionBarから直接選択可能なメニュー項目を使用して変更するために、ActivityにあるActionBarを使用したいと思います。下位フラグメントのActionBarアイテムの使用方法

メッセージをアクティビティからフラグメントに送信して、アクションバーアイテムの1つを実装するように指示する最善の方法は何ですか?

私は次のことを試してみました:

@Override 
public boolean onOptionsItemSelected(MenuItem item) { 
    // Handle action bar item clicks here. The action bar will 
    // automatically handle clicks on the Home/Up button, so long 
    // as you specify a parent activity in AndroidManifest.xml. 
    int id = item.getItemId(); 

    if (id == R.id.action_settings) { 
     FragmentManager manager = getSupportFragmentManager(); 
     List<Fragment> fs = new ArrayList<>(manager.getFragments()); 
     int fragId = fs.get(0).getId(); 
     PlayFragment fragment = (PlayFragment) manager.findFragmentById(fragId); 
     fragment.settingsMenu(); 
     return true; 

これは働くが、また、それが動作するように取得するフラグメントの順序を知っている必要がありますのは悪い形でされていません。この方法は私のためには機能しませんでした。私はそれを動作させるためにbroadcastSenderを使うことができるのは分かっていますが、それも悪い形です。ここでの本当の問題は、フラグメントはTabHost内ViewPagerの上に座っているので、確実にIDやタグを取得する方法がないということなので、

manager.findFragmentById(fragId)と manager.findFragmentByTag(」 MyFragmentName ")は役に立ちません。

フラグメント内のOnClickListenerにツールバーをアタッチしようとすると、機能しません。フラグメントにはサポートがありません。 @Override public boolean onOptionsItemSelected(MenuItem item);

解決策を探し続けるつもりです。ありがとう。

答えて

0

私は別の投稿で答えを見つけました。トリックは、アクティビティからツールバーを取得し、それをアクションバーとして直接使用しないことです。あなた自身のメニューを膨らませ、タイトル変更などにアクセスする必要があります。

@OverrideパブリックビューonCreateView(LayoutInflater用インフレータ、のViewGroup容器、バンドルsavedInstanceState){ 戻りinflater.inflate(R.layout.play_fragment、容器、偽)。 }

@Override 
public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    app = JamSessionApplication.getInstance(); 

    toolbar = (Toolbar) getActivity().findViewById(R.id.toolbar); 
    toolbar.setTitle(song); 
    // Set an OnMenuItemClickListener to handle menu item clicks 
    toolbar.setOnMenuItemClickListener(new Toolbar.OnMenuItemClickListener() { 
     @Override 
     public boolean onMenuItemClick(MenuItem item) { 
      // Handle action bar item clicks here. The action bar will 
      // automatically handle clicks on the Home/Up button, so long 
      // as you specify a parent activity in AndroidManifest.xml. 
      int id = item.getItemId(); 
      if (id == R.id.action_reverb) { 
       Toast.makeText(getActivity(), "Reverb", Toast.LENGTH_SHORT).show(); 
       return true; 
      } 
      return true; 
     } 
    }); 
    toolbar.inflateMenu(R.menu.menu_play); 

}

私はまだ正常に動作しViewPager/Tabhostのtoobarsで問題が発生しました。私はこれを修正するのにもっと役立つ記事を見つけました。 https://www.numetriclabz.com/android-tabs-with-fragments-and-viewpager-tutorial/

関連する問題