0

Я только что сделал переход от затмения к Android Studio, и я исправляю некоторые проблемы, которые возникли. Одним из них является удаление навигации на вкладке, предлагаемой ActionBar, и переход на Tablayout, предлагаемый библиотекой поддержки AD. У меня все хорошо работает, но я не могу понять, как добавить элементы меню на панель инструментов, когда на экране появляются определенные фрагменты.

Я думаю, что часть вопроса заключается в том, что моя MainActivity расширяет FragmentActivity, которая принимает setActionBar(), а панель инструментов - из библиотеки поддержки v7 - поэтому, конечно, эта панель инструментов не совместима с этим методом. Я попробовал setSupportActionBar(), но это не метод, найденный в FragmentActivity - здесь мне нужно будет расширить ActionBarActivity для доступа к этому методу, оба из которых устарели (класс и метод).

Итак, остается вопрос, как я могу сделать свои отдельные фрагменты обновленными опциями в меню опций панели инструментов?

activity_main.xml:Android Design Support Library - Tablayout с панелью инструментов

<?xml version="1.0" encoding="utf-8"?> 
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    xmlns:app="http://schemas.android.com/apk/res-auto" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    android:orientation="vertical"> 

    <android.support.design.widget.CoordinatorLayout 
     android:layout_width="match_parent" 
     android:layout_height="wrap_content"> 

     <android.support.design.widget.AppBarLayout 
      android:layout_width="match_parent" 
      android:layout_height="wrap_content"> 

      <android.support.v7.widget.Toolbar 
       android:id="@+id/main_toolbar" 
       android:layout_width="match_parent" 
       android:layout_height="?android:attr/actionBarSize" 
       android:layout_gravity="top" 
       android:background="@color/blue" 
       app:layout_scrollFlags="scroll|enterAlways" 
       app:layout_collapseMode="pin" /> 

      <android.support.design.widget.TabLayout 
       android:id="@+id/main_sliding_tabs" 
       android:layout_width="match_parent" 
       android:layout_height="wrap_content" 
       app:tabIndicatorColor="@color/blue" 
       app:tabMode="fixed" /> 

     </android.support.design.widget.AppBarLayout> 
    </android.support.design.widget.CoordinatorLayout> 

    <android.support.v4.view.ViewPager 
     android:id="@+id/main_viewpager" 
     android:layout_width="match_parent" 
     android:layout_height="0px" 
     android:layout_weight="1" 
     android:background="@android:color/white" /> 

</LinearLayout> 

MainActivity.java:

public class MainActivity extends FragmentActivity implements 
    TabLayout.OnTabSelectedListener { 

    private Toolbar     mToolbar; 
    private ViewPager    mViewPager; 
    private TabsPagerAdapter  mTabsPagerAdapter; 
    private TabLayout    mTabLayout; 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_main); 

     // * unrelated code omitted ... 

     // * Initialize main navigation scheme 
     mToolbar = (Toolbar)findViewById(R.id.main_toolbar); 
     mToolbar.setTitleTextColor(getResources().getColor(R.color.white)); 
     mToolbar.setLogo(R.drawable.icon_toolbar); 

     mViewPager = (ViewPager)findViewById(R.id.main_viewpager); 
     mTabsPagerAdapter = new TabsPagerAdapter(getSupportFragmentManager()); 
     mViewPager.setAdapter(mTabsPagerAdapter); 

     mTabLayout = (TabLayout)findViewById(R.id.main_sliding_tabs); 
     mTabLayout.setupWithViewPager(mViewPager); 
     mTabLayout.setOnTabSelectedListener(this); 

     mViewPager.addOnPageChangeListener(new TabLayout.TabLayoutOnPageChangeListener(mTabLayout)); 

    } 
} 

ExampleFragment.java:

public class ExampleFragment extends Fragment { 

    @Override 
    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { 
     View rootView = inflater.inflate(R.layout.fragment_athlete, container, false); 

     // * unrelated code omitted ... 

     return rootView; 
    } 

    @Override 
    public void onActivityCreated(Bundle savedInstanceState) { 
     super.onActivityCreated(savedInstanceState); 
     setHasOptionsMenu(true); 
    } 

    @Override 
    public void onPrepareOptionsMenu(Menu menu) { 
     super.onPrepareOptionsMenu(menu); 
     // * unrelated code omitted ... 
    } 
    @Override 
    public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) { 
     super.onCreateOptionsMenu(menu, inflater); 
     inflater.inflate(R.menu.example_action_menu, menu); 
    } 
    @Override 
    public boolean onOptionsItemSelected(MenuItem item) { 
     // * unrelated code omitted ... 
     return super.onOptionsItemSelected(item); 
    } 
} 

ответ

0

Пришлось изменить мою MainActivity, чтобы расширить AppCompatActivity вместо FragmentActivity. Тогда в моих темах, изменить его мой стиль:

<style name="YourCustomTheme" parent="Theme.AppCompat.Light.NoActionBar"> 
</style> 

Обратите внимание на тему .NoActionBar. Сейчас все работает так, как ожидалось.