Изменить заголовок ActionBar с помощью фрагментов

  • Я использую Actionbar.
  • У меня есть Фрагмент вызова Избранное, где я сохраняю некоторые контакты в качестве избранных.
  • Когда вы нажимаете на один контакт, он переносит меня на другой фрагмент и помещает номер контакта в текст редактирования.
  • Новый фрагмент называется Передача вызовов.

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

Я уже пытался использовать setTitle на методе щелчка, но все еще не работает.

2 ответа

Решение

В вашей деятельности:

public void setActionBarTitle(String title) {
    getSupportActionBar().setTitle(title);
}

И в вашем фрагменте (вы можете поместить его в Create или onResume):

 public void onResume(){
        super.onResume();

    // Set title bar
    ((MainFragmentActivity) getActivity())
            .setActionBarTitle("Your title");

}

В вашем фрагменте

public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {

    getActivity().setTitle("Team B");

    View rootView = inflater.inflate(R.layout.fragment_team_b, container, false);

    return rootView;
}

Если вы используете компоненты навигации от Android Jetpack. Панель действий считывает атрибут Label для имени фрагмента. Не уверен, что это правильное исправление, но если вы измените текст метки в редакторе навигации, он будет прочитан supportActionBar, который настроен в Activity, в которой размещены фрагменты.

Em Kotlin Você pode usar o seguinte código nas funções: onCreateView, onStart и onResume.

override fun onStart() {
   super.onStart()

   (activity as? AppCompatActivity).supportActionBar?.title = "Título".
}

Мы предпочитаем, когда вы думаете, что работает над расширением и Chamar dentro делать фрагмент.

import androidx.appcompat.app.AppCompatActivity
import androidx.fragment.app.Fragment

fun Fragment.setTitle(title: String) {
    (activity as? AppCompatActivity).supportActionBar?.title = title
}

Chamada da função de extensão dentro do Fragment.

class StartFragment : Fragment() {

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

   override fun onStart() {
       super.onStart()

       this.setTitle(getString(R.string.titulo))
   }
}

Для java используйте
для изменения заголовка панели инструментов

@Override
public View onCreateView(LayoutInflater inflater,
                         ViewGroup container, Bundle savedInstanceState) {

    ((MainActivity) getActivity()).getSupportActionBar().setTitle("hello word");

    View root = inflater.inflate(R.layout.fragment_home, container, false);
    return root;
}

@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
}

Ответ NOT_A_PROGRAMMER правильный, но когда вы вернетесь к предыдущему действию или фрагменту, заголовок останется прежним.

Вот мое решение для этого.

  • Переопределив OnPause() или OnStopMethod во фрагменте, вы можете использовать тот же метод " ((MainFragmentActivity) getActivity()). SetActionBarTitle("Your title"); " для установки заголовка Activity или Fragment, который присутствует в backstack.
    @Override
    public void onStop() {
        super.onStop();
        ((MPOSTransactionActivity) getActivity()).setActionBarTitle(getString(//NAME));
    }
Другие вопросы по тегам