Установить заголовок inToolBar из фрагмента в Android

Я использую последнюю панель инструментов из AppCompatv7 lib.I поместил текстовое представление в панель инструментов ToolBar. Я хочу установить заголовок в это текстовое представление из фрагмента в моей активности. В случае пользовательской панели действий ((ActionBarActivity) getActivity) .setcustomView (..) выполнил бы эту работу. Но из-за использования этой ToolBar я не могу это использовать. Также я реализовал метод в моей BaseActivity, который унаследован всеми Activity.This BaseActivity содержит мой метод для инициализации Скользящий ящик слева. Мне нужно инициализировать метод initDrawerLayout () в активности, иначе ящик не будет инициализирован. И если я инициализирую его по фрагменту, он даст мне все пустые результаты, ни кнопка переключения для ящика, ни Настраиваемый заголовок.

Это мой код initDrawer ..

public void initDrawerLayout(String toolbar_text) { mDrawerLayout = (DrawerLayout) findViewById(R.id.drawer_layout); mDrawerRelative = (RelativeLayout) findViewById(R.id.drawer_relative); if (mDrawerLayout != null) { findViewById(R.id.drawer_btn_a).setOnClickListener(this); findViewById(R.id.drawer_btn_b).setOnClickListener(this); findViewById(R.id.drawer_btn_c).setOnClickListener(this); findViewById(R.id.drawer_btn_d).setOnClickListener(this); findViewById(R.id.drawer_btn_e).setOnClickListener(this); findViewById(R.id.drawer_btn_f).setOnClickListener(this); findViewById(R.id.drawer_btn_g).setOnClickListener(this); findViewById(R.id.drawer_btn_h).setOnClickListener(this); findViewById(R.id.drawer_btn_i).setOnClickListener(this); findViewById(R.id.drawer_btn_j).setOnClickListener(this); findViewById(R.id.drawer_btn_k).setOnClickListener(this); findViewById(R.id.drawer_btn_l).setOnClickListener(this); findViewById(R.id.my_layout).setOnClickListener(this); Toolbar toolbar = (Toolbar) findViewById(R.id.my_awesome_toolbar); toolbar.setBackground(getResources().getDrawable(R.drawable.icn_actionbar_background)); TextView mTitle = (TextView) toolbar.findViewById(R.id.toolbar_title); mTitle.setText(toolbar_text); mTitle.setTypeface(Typeface.DEFAULT_BOLD); if (toolbar != null) { setSupportActionBar(toolbar); getSupportActionBar().setDisplayHomeAsUpEnabled(true); } toolbar.setNavigationIcon(R.drawable.ic_drawer); mDrawerToggle = new ActionBarDrawerToggle( this, mDrawerLayout, toolbar, R.string.drawer_open, R.string.drawer_close ); mDrawerLayout.setDrawerListener(mDrawerToggle); toolbar.setNavigationOnClickListener(new OnClickListener() { @Override public void onClick(View v) { if (mDrawerLayout.isDrawerOpen(Gravity.LEFT)) { mDrawerLayout.closeDrawer(Gravity.LEFT); } else { mDrawerLayout.openDrawer(Gravity.LEFT); } } }); mDrawerLayout.setDrawerShadow(R.drawable.drawer_shadow, GravityCompat.START); mDrawerLayout.setScrimColor(getResources().getColor( android.R.color.transparent)); getSupportActionBar().setDisplayHomeAsUpEnabled(true); getSupportActionBar().setHomeButtonEnabled(true); getSupportActionBar().setDisplayShowTitleEnabled(false); } } 

И этот мой код в фрагменте ..

((FirstActivity) getActivity()).initDrawerLayout(mFirst.name); Где mFirst – объект класса Person

И код панели инструментов ..

 <android.support.v7.widget.Toolbar android:id="@+id/my_awesome_toolbar" android:layout_width="match_parent" android:layout_height="wrap_content" android:minHeight="?attr/actionBarSize"> <TextView android:id="@+id/toolbar_title" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_gravity="center" android:gravity="center" android:text="Toolbar Title" android:textColor="@color/action_text-color" android:textSize="18sp" android:textStyle="bold" /> </android.support.v7.widget.Toolbar> 

Пожалуйста, помогите ребятам ..

Solutions Collecting From Web of "Установить заголовок inToolBar из фрагмента в Android"

Чтобы позволить фрагменту связываться с его активностью (чтобы задать заголовок панели инструментов), вы можете определить интерфейс в классе фрагментов и реализовать его в рамках Действия, как описано здесь: « Общение с другими фрагментами» .

Я делаю это вот так: из вызова фрагмента

 getActivity().setTitle("your title"); 

Также вы можете вызывать любую функцию родительской активности следующим образом:

 YourActivity mYourActiviy = (YourActivity) getActivity(); mYourActivity.yourActivityFunction(yourParameters); 

Вы можете изменить название своей панели инструментов на событии OnAttach, что-то вроде этого

  var toolbar = activity.FindViewById<Android.Support.V7.Widget.Toolbar>(Resource.Id.toolbar); toolbar.Title = "New Title"; 

Ответ описан ниже в методе oncreateview фрагментов.

getActivity().setTitle("your name");

 getSupportFragmentManager().addOnBackStackChangedListener(new FragmentManager.OnBackStackChangedListener() { @Override public void onBackStackChanged() { FragmentManager.BackStackEntry lastBackStackEntry=null; int lastBackStackEntryCount = getSupportFragmentManager().getBackStackEntryCount() - 1; if(lastBackStackEntryCount >= 0 ) { lastBackStackEntry = getSupportFragmentManager().getBackStackEntryAt(lastBackStackEntryCount); } Toast.makeText(MainActivity.this, ""+lastBackStackEntryCount, Toast.LENGTH_SHORT).show(); if(lastBackStackEntryCount == -1) { toolbar.setTitle(""); toolbar.setLogo(R.drawable.header_logo); } else { toolbar.setTitle(lastBackStackEntry.getName()); } } }); 

В своей деятельности объявите панель открытой.

 public class YourActivity : Activity { public Toolbar toolbar; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); toolbar = .... // initilize your toolbar } } 

Затем из вашего фрагмента

 ((YourActivity) getActivity()).toolbar.Title = "Your Title"; 

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

 getSupportFragmentManager().beginTransaction().replace(R.id.main_fragment, mainFragment).commit(); toolbar.setTitle("ShivShambhu"); return contentFragment; 

Это работает для меня.

Если кто-то борется с этой проблемой, это может быть полезно.

В принципе у вас есть 4 варианта, как с этим справиться:

  • Используйте интерфейс для связи с вашей деятельностью или любым другим удобным способом, например, с шиной событий.
  • Вы вызываете getActivity().setTitle("Title") , но в этом случае вам нужно прикрепить свою Toolbar к ActionBar , вызвав setSupportActionBar() в вашей деятельности.
  • У вас может быть открытый экземпляр Toolbar и доступ к этому экземпляру из фрагмента.
  • Наконец, если вам нужен экземпляр вашей Toolbar (вы можете сделать что-то еще с), вы можете просто получить ее так:

    Toolbar bar=Toolbar.class.cast(getActivity().findViewById(R.id.toolbar));

Ну, последний вариант разрешил бы проблему только в том случае, если Toolbar не была передана методу setSupportActionBar .

Если бы это было так, то вам нужно вызвать этот метод в своей деятельности:

supportActionBar.setDisplayShowTitleEnabled(false) ,

Которая решит проблему.

Тем не менее, я бы предложил использовать ButterKnife, который сделает его немного чище, вот пример:

  Toolbar actionBar=findById(getActivity(),R.id.actionBar); actionBar.setTitle("Title"); 

Если вы используете настраиваемую панель инструментов, это поможет вам:

 Toolbar toolbar = (Toolbar) getActivity().findViewById(R.id.toolbar); toolbar.setTitle("Feedback");