更改片段中的 ActionBar 标题

Change ActionBar title in the fragments

我需要根据调用的片段更改和更新 ActionBar 标题。

我使用了这个示例方法:

=Method 1===============================
Activity > Codigo
public void setActionBarTitle(String title) {
    getSupportActionBar().setTitle(title);
}

Fragmento > Codigo
public void onResume(){
        super.onResume();

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

}

=Method 2================================

Activity:
public void setActionBarTitle(String title){
    YOUR_CUSTOM_ACTION_BAR_TITLE.setText(title);
}

Fragment:
((MainFragmentActivity) getActivity()).setActionBarTitle(YOUR_TITLE);

两种方式我都有none实时更新标题

但它无法正常工作,因为它不会根据屏幕/片段的变化更新标题。升级需要一段时间,希望是实时的

缺少什么?

你必须实现 OnBackStackChangedListener 它会覆盖 onBackStackChanged 方法。

MainFragmentActivity

@Override
public void onBackStackChanged() {
    try {
       
        Fragment fragment = getSupportFragmentManager().findFragmentById(R.id.home_container);
        fragment.onResume();

    } catch (Exception ex) {
        ex.printStackTrace();
    }
}

片段

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

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

onBackStackChanged 每次你的片段从一个变成另一个时都会调用

NOTE- don't forget use getSupportFragmentManager().addOnBackStackChangedListener(this); And fragmentTransaction.addToBackStack(null);

希望对您有所帮助。

编辑

  • 首先像这样实现这个接口 - class MyActivity extends AppCompatActivity implements OnBackStackChangedListener - Example and Documents
  • 然后在 onCreate() 方法中编写此代码 getSupportFragmentManager().addOnBackStackChangedListener(this); 此方法将负责片段的更改。
  • 当您替换片段时,然后将此方法与 FragmentTransection 一起使用 fragmentTransaction.addToBackStack(null); 此方法会将您的片段添加到堆栈中,当您按下后退按钮时,它将显示堆栈中的上一个片段 - Example and Documents

首先创建界面

public interface ToolbarInterface {

public void getToolbarResources(String title, int visibility);
}

在您的 activity

中实施
public class NavigationDrawerActivity extends AppCompatActivity
    implements ToolbarInterface

并覆盖activity

中的接口方法
 @Override
public void getToolbarResources(String title, int visibility) {
        getSupportActionBar().setTitle(title);
    }
}

在Fragment调用接口中的Oncreete方法如

@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
 ToolbarInterface toolbarCallback = (ToolbarInterface) getActivity();
}

并通过 onCreateView 方法设置标题

toolbarCallback.getToolbarResources("Toolbar title",1);