Использование панели инструментов с фрагментами

Создайте размещенную зону для test.example.com.

Обратите внимание на 4 сервера имен, которые Route 53 назначает ему новую размещенную зону.

Вернитесь в главную зону, создайте новую запись ресурса с именем хоста «test» с использованием типа NS и введите 4 сервера имен, назначенных Маршрутом 53, в поле ниже.

Вы просто делегировали субдомен «test.example.com», и любые хосты и субдомены в нем, в другую зону размещения, которую вы теперь можете разбить на контент вашего сердца, не влияя на производственные записи.

29
задан Vadim Kotov 26 June 2019 в 12:19
поделиться

5 ответов

Фрагменты не имеют такого метода setSupportActionBar(). ActionBar является свойством Activity, поэтому чтобы установить панель инструментов как actionBar, ваша активность должна быть расширена от ActionBarActivity, а затем вы можете вызвать свой фрагмент:

 ((ActionBarActivity)getActivity()).setSupportActionBar(mToolbar);

UPDATE

Если вы используете AppCompatActivity :

 ((AppCompatActivity)getActivity()).setSupportActionBar(mToolbar);
60
ответ дан vinitius 26 June 2019 в 12:19
поделиться

Я видел много ответов, упоминающих setSupportActionBar для панели инструментов внутри Fragment, но этот подход может пойти не так, если у вас есть панель инструментов в Activity и отдельная Toolbar в Fragment.

  1. При перемещении setSupportActionBar с панели инструментов «Деятельности» на панель инструментов «Фрагмента» вы можете столкнуться с дублированием MenuItem, даже если попытаетесь переопределить, используя setHasOptionsMenu(true).
  2. Во-вторых, если вы хотите обновить панель инструментов деятельности, вы увидите, что ваши изменения не отражены из-за setSupportActionBar внутри вашего фрагмента.

Поэтому, чтобы избежать этого, я рекомендую использовать методы панели инструментов, подобные этому, во внутреннем фрагменте, чтобы раздувать меню и использовать

 toolbar = (Toolbar) view.findViewById(R.id.toolbar_frag);
    toolbar.inflateMenu(R.menu.frag_menu_items);
    Menu menu = toolbar.getMenu();

и использовать интерфейс Toolbar.OnMenuItemClickListener для получения с событиями меню menuItems.

Редактировать (Раздел скопирован с MrEngineer13 answer )

и, если вас беспокоит кнопка «Назад», вы можете установить ее следующим образом

toolbar.setNavigationIcon(getResources().getDrawable(R.drawable.ic_action_back));
toolbar.setNavigationOnClickListener(new View.OnClickListener() {
   @Override
   public void onClick(View v) {
       //What to do on back clicked
   }
});
28
ответ дан Faisal Naseer 26 June 2019 в 12:19
поделиться

Основываясь на ответе @Faisal Naseer. Вот полный пример (с несколькими примечаниями) для использования пользовательского Toolbar с навигацией и меню в Fragment

frag_home.xml

<androidx.constraintlayout.widget.ConstraintLayout 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"">

    ...
    <androidx.appcompat.widget.Toolbar
            android:id="@+id/toolbar_home"
            android:layout_width="match_parent"
            android:layout_height="?attr/actionBarSize"
            app:title="Home" /> 

</androidx.constraintlayout.widget.ConstraintLayout>

HomeFragment.kt

class HomeFragment : BaseFragment() {

    override fun onCreate(savedInstanceState: Bundle?) {
        // setHasOptionsMenu(true): don't need this anymore
    }

    override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?): View? {
        return inflater.inflate(R.layout.fragment_home, container, false)
    }

    override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
        super.onViewCreated(view, savedInstanceState)

        toolbar_home.setNavigationIcon(R.drawable.ic_back) // need to set the icon here to have a navigation icon. You can simple create an vector image by "Vector Asset" and using here
        toolbar_home.setNavigationOnClickListener {
            // do something when click navigation
        }

        toolbar_home.inflateMenu(R.menu.menu_home)
        toolbar_home.setOnMenuItemClickListener {
            when (it.itemId) {
                R.id.action_add -> {
                    // do something
                    true
                }
                R.id.action_update -> {
                    // do something
                    true
                }
                else -> {
                    super.onOptionsItemSelected(it)
                }
            }
        }
    }
}

menu_home.xml

<menu xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto">

    <item
        android:id="@+id/action_add"
        android:title="@string/add_device"
        app:showAsAction="never" />

    <item
        android:id="@+id/action_update_room"
        android:title="@string/update_room"
        app:showAsAction="never" />

</menu>

Надеюсь, это поможет

enter image description here

5
ответ дан Phan Van Linh 26 June 2019 в 12:19
поделиться

С новым AppCompatActivity вы должны вызывать его вместо ActionBarActivity:

((AppCompatActivity)getActivity()).setSupportActionBar(toolbar);
8
ответ дан muruthi 26 June 2019 в 12:19
поделиться

Вы можете добавить панель инструментов во Фрагменты, используя это

 ((YOUR_ACTIVITY) getActivity()).getDelegate().setSupportActionBar(toolbar);
2
ответ дан H.T 26 June 2019 в 12:19
поделиться
Другие вопросы по тегам:

Похожие вопросы: