从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 中更改onCreateonResume 中的标题

((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 中更改onCreateonResume 中的标题

((YourActivityClassName)getActivity()).setActionBarTitle("Create New Task");

【讨论】:

@jyothichandra 我更新了答案。实际上,您必须将 getActivity() 与您的活动类一起投射。

以上是关于从android中的片段更改自定义ActionBar标题的主要内容,如果未能解决你的问题,请参考以下文章

片段中ListView的android自定义适配器

片段中的按钮自定义视图

Android:在片段内膨胀自定义视图

对话框片段中的 MP 图表

两个片段之间的 onItemClickListener

以编程方式从自定义 android 键盘更改键盘