Установить заголовок inToolBar из фрагмента в Android
Я использую последнюю панель инструментов из appcompatv7 lib.Я поместил textview в ViewGroup панели инструментов, и я хочу установить заголовок в этом Textview из фрагмента в моей деятельности.В случае настраиваемой панели действий ((ActionBarActivity)getActivity).setcustomView(..) сделал бы свою работу.Но из-за использования этой панели инструментов я не могу использовать это.Также я реализовал метод в своей BaseActivity, который наследуется всеми действиями.Эта BaseActivity содержит мой метод для инициализируйте выдвижной ящик слева.Я должен инициализировать метод initDrawerLayout () в activity, иначе ящик не будет инициализирован.И если я инициализирую его во фрагменте, он дает мне все пустые результаты, ни кнопка переключения для ящика, ни пользовательский заголовок не устанавливаются.
Это мой код 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>
пожалуйста помогите парни..
13 ответов
чтобы разрешить фрагменту связываться с его активностью (чтобы установить заголовок панели инструментов), вы можете определить интерфейс в классе Fragment и реализовать его в рамках действия, как описано здесь: связь с другими фрагментами.
Я делаю это, как это: из фрагмента вызов
getActivity().setTitle("your title");
Также вы можете вызвать любую функцию вашей родительской деятельности следующим образом:
YourActivity mYourActiviy = (YourActivity) getActivity();
mYourActivity.yourActivityFunction(yourParameters);
Если у вас есть setSupportActionBar в вашей деятельности, то вы можете легко изменить заголовок панели инструментов из вашего фрагмента
((YourActivity) getActivity()).getSupportActionBar().setTitle("Your Title");
вы можете изменить название панели инструментов на событии OnAttach, что-то вроде этого
var toolbar = activity.FindViewById<Android.Support.V7.Widget.Toolbar>(Resource.Id.toolbar);
toolbar.Title = "New Title";
Если вы используете пользовательскую панель инструментов, это поможет вам:
Toolbar toolbar = (Toolbar) getActivity().findViewById(R.id.toolbar);
toolbar.setTitle("Feedback");
если кто-то борется с этой проблемой, это может быть полезно.
в основном у вас есть 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");
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());
}
}
});
эта работа для меня :
Toolbar toolbar = (Toolbar) getActivity().findViewById(R.id.id_toolbar);
toolbar.setTitle("New Title");
в вашей деятельности объявите панель инструментов общедоступной.
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";
вам нужно установить заголовок в activity commiting фрагмента и вернуть фрагмент
getSupportFragmentManager().beginTransaction().replace(R.id.main_fragment, mainFragment).commit();
toolbar.setTitle("ShivShambhu");
return contentFragment;
это работает для меня.
В Котлин.
фрагмент:
(activity as YourActivity).supportActionBar?.title = getString(R.string.your_title)
в работе:
setSupportActionBar(toolbar)
supportActionBar?.setDisplayHomeAsUpEnabled(true)
supportActionBar?.setDisplayShowHomeEnabled(true)
xml
<android.support.v7.widget.Toolbar
android:id="@+id/toolbar_detail"
android:layout_width="match_parent"
android:layout_height="55dp"
android:paddingLeft="10dp"
android:paddingRight="10dp"
app:contentInsetStart="0dp"
app:contentInsetStartWithNavigation="0dp"
android:background="@color/tool_bar_color">
<LinearLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="horizontal"
android:gravity="center">
<TextView
android:id="@+id/toolbar_title"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_weight="1"
android:textColor="#fff"
android:textSize="16sp" />
</LinearLayout>
</android.support.v7.widget.Toolbar>
найти TextView Id из панели инструментов
Если вы используете Activity
TextView mTitle = findViewById(R.id.toolbar_title);
mTitle.setText("set your title");
Если вы используете фрагмент
TextView mTitle = view.findViewById(R.id.toolbar_title);
mTitle.setText("set your title");