从android中的片段更改自定义ActionBar标题
Posted
技术标签:
【中文标题】从android中的片段更改自定义ActionBar标题【英文标题】:change custom ActionBar title from fragment in android 【发布时间】:2020-10-04 19:33:45 【问题描述】:嗨,在下面的代码中,如果我按下 fab 按钮将一个片段替换为另一个片段,同时我也在更改标题,那么我有一个 fab 按钮。
但是片段被替换了,但标题没有改变。
谁能帮帮我
OneFragement.java:
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState)
// Inflate the borderdashboard for this fragment
((AppCompatActivity) getActivity()).getSupportActionBar().setTitle("Task List");
View rootView = inflater.inflate(R.layout.account_list, container, false);
setHasOptionsMenu(true);
setSearchtollbar();
FloatingActionButton fb = rootView.findViewById(R.id.fab);
fb.setOnClickListener(new View.OnClickListener()
@Override
public void onClick(View v)
isDuplicate = "false";
Bundle args = new Bundle();
args.putString("isDuplicate", String.valueOf(isDuplicate));
fragment = new TaskCreateFragement();
sessionId = getActivity().getIntent().getStringExtra("sessionId");
fragment.setArguments(args);
((AppCompatActivity) getActivity()).getSupportActionBar().setTitle("Create New Task");
loadFragment(fragment);
);
SecondFragment.java:
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState)
// Inflate the borderdashboard for this fragment
((AppCompatActivity) getContext()).getSupportActionBar().setTitle("Create New Task");
MainActivity.java:
toolbar = findViewById(R.id.toolbar);
setSupportActionBar(toolbar);
// getSupportActionBar().setTitle("DASHBOARD");
final ActionBar ab = getSupportActionBar();
ab.setDisplayOptions(ActionBar.DISPLAY_SHOW_CUSTOM);
ab.setCustomView(R.layout.toolbar_spinner);
if (ab != null)
ab.setDisplayShowTitleEnabled(false);
mTitle = (TextView) findViewById(R.id.toolbar_title);
mTitle.setText("DASHBOARD");
mTitle.setGravity(Gravity.CENTER_HORIZONTAL);
// Typeface typeface = Typeface.createFromAsset(getApplicationContext ().getAssets (), "fonts/astype - Secca Light.otf");
// mTitle.setTypeface (typeface);
ab.setHomeAsUpIndicator(R.drawable.menu);
ab.setDisplayHomeAsUpEnabled(true);
【问题讨论】:
发布您的活动代码 @VivekSingh 发布活动代码 我发布了一个答案,检查它是否有效。 @VivekSingh 除了 mTitle 没有任何效果 【参考方案1】:在Activity
中创建方法
public void setActionBarTitle(String title)
mTitle.setText(title); // as you used custom view
在SecondFragment
中更改onCreate
或onResume
中的标题
((YourActivity)getActivity()).setActionBarTitle("Create New Task");
【讨论】:
Activity 到 Fragment 这不是问题。Fragment 之间的标题没有改变 您只需在活动中创建一个方法,每当您想更改片段中的标题时,只需调用setActionBarTitle
方法
让我们continue this discussion in chat。【参考方案2】:
在托管您的片段的活动中的onCreate
方法中添加此sn-p,并查看您的代码是否正常工作。
@Override
protected void onCreate(Bundle savedInstanceState)
getActionBar().setDisplayShowTitleEnabled(true);
【讨论】:
【参考方案3】:制作回调类
package com.yourpackage.view;
public interface HomePageBottomCallback extends IView
void onTitle(String Title);
package com.yourpackage.view;
import android.content.Context;
public interface IView
Context getContext();
将 HomePageBottomCallback 实现到您的主类并在主类中实现其方法
public class MainActivity extends BaseActivity
implements HomePageBottomCallback
@Override
public void onTitle(String Title)
TitleSet(Title);
setTitle(Title)
在使用的片段回调中
public HomePageBottomCallback callback;
@Override
public void onAttach( Context context)
super.onAttach(context);
try
callback = (HomePageBottomCallback) context;
catch (ClassCastException e)
throw new ClassCastException(context.toString()
+ " must implement HeadlineListener");
@Override
public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState)
binding = DataBindingUtil.inflate(inflater, R.layout.fragment_home, container, false);
callback.onTitle("Your Page");
【讨论】:
【参考方案4】:您正在工具栏中创建自定义视图,因此您必须在 Toolbar
布局中更改 TextView
的文本。
在您的 Activity
中创建一个方法
public void setActionBarTitle(String title)
mTitle.seText(title);
在SecondFragment
中更改onCreate
或onResume
中的标题
((YourActivityClassName)getActivity()).setActionBarTitle("Create New Task");
【讨论】:
@jyothichandra 我更新了答案。实际上,您必须将 getActivity() 与您的活动类一起投射。以上是关于从android中的片段更改自定义ActionBar标题的主要内容,如果未能解决你的问题,请参考以下文章