你需要先将你的活动从 getActivity() 转换为 AppCompatActivity。这里是一个例子:
((AppCompatActivity) getActivity()).getSupportActionBar().setTitle();
你需要进行类型转换是因为getActivity()返回的是FragmentActivity类型,而你需要的是一个AppCompatActivity类型。
Kotlin中的写法:
(activity as AppCompatActivity).supportActionBar?.title = "My Title"
如果片段应具有自定义的工具栏视图,则可以为每个片段单独实现工具栏。
将工具栏添加到 fragment_layout 中:
<android.support.v7.widget.Toolbar
xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/toolbar"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:background="?attr/colorPrimaryDark"/>
在片段中查找:
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
View view = inflater.inflate(R.layout.fragment, container, false);
Toolbar toolbar = (Toolbar) view.findViewById(R.id.toolbar);
//set toolbar appearance
toolbar.setBackground(R.color.material_blue_grey_800);
//for crate home button
AppCompatActivity activity = (AppCompatActivity) getActivity();
activity.setSupportActionBar(toolbar);
activity.getSupportActionBar().setDisplayHomeAsUpEnabled(true);
}
菜单监听器可以通过两种方式创建: 在您的片段中覆盖onOptionsItemSelected:
@Override
public boolean onOptionsItemSelected(MenuItem item) {
switch(item.getItemId()){
case android.R.id.home:
getActivity().onBackPressed();
}
return super.onOptionsItemSelected(item);
}
或者在onCreateView()中创建工具栏时为其设置监听器:
toolbar.setOnMenuItemClickListener(new Toolbar.OnMenuItemClickListener() {
@Override
public boolean onMenuItemClick(MenuItem menuItem) {
return false;
}
});
onOptionsItemSelected() 方法,而不是 Fragment 的。 - Aditya Naique您有两个选择来在Fragment中获取工具栏
第一个选择
Toolbar toolbar = (Toolbar) getActivity().findViewById(R.id.toolbar);
和第二个
Toolbar toolbar = ((MainActivity) getActivity()).mToolbar;
toolbar = (Toolbar) getView().findViewById(R.id.toolbar);
AppCompatActivity activity = (AppCompatActivity) getActivity();
activity.setSupportActionBar(toolbar);
(activity as AppCompatActivity).supportActionBar?.show() 的意思是“显示应用程序栏”。其中,“?”表示如果应用程序栏不为空,则执行该操作。
? 完全可以避免 !!,并且可以避免可能的崩溃。 - JonZarate(activity as? AppCompatActivity)?.supportActionBar?.show() - JonZarate从你的Fragment中:(如何从fragment中获取工具栏?)
// get toolbar
((MainAcivity)this.getActivity()).getToolbar(); // getToolbar will be method in Activity that returns Toolbar!! don't use getSupportActionBar for getting toolbar!!
// get action bar
this.getActivity().getSupportActionBar();
这非常有用,特别是当你在工具栏中使用下拉框(spinner)并从片段中调用工具栏中的 spinner 或自定义视图时!
从你的活动:
// get toolbar
this.getToolbar();
// get Action Bar
this.getSupportActionBar();
如果你正在使用support_v7,那么你可能需要尝试getActivity().getSupportActionBar().setTitle()。
我是通过以下步骤完成的。
onCreateView中使用下面的代码设置标题。((AppCompatActivity) getActivity()).getSupportActionBar().setTitle("Your title");
public boolean onNavigationItemSelected(@NonNull MenuItem menuItem) {
switch (menuItem.getItemId()){
case R.id.menu_dashboard:
getSupportActionBar().setTitle("仪表盘");
fm.beginTransaction().hide(active).show(dashboardFragment).commit();
active = dashboardFragment;
return true;
case R.id.menu_workshop:
getSupportActionBar().setTitle("工作坊");
fm.beginTransaction().hide(active).show(workshopFragment).commit();
active = workshopFragment;
return true;
}
return false;
}
在XML中
<androidx.appcompat.widget.Toolbar
android:id="@+id/main_toolbar"
android:layout_width="match_parent"
android:layout_height="?attr/actionBarSize"
app:layout_scrollFlags="scroll|enterAlways">
</androidx.appcompat.widget.Toolbar>
Kotlin: 在 fragment.kt 文件中
-> onCreateView() 方法
setHasOptionsMenu(true)
val toolbar = view.findViewById<Toolbar>(R.id.main_toolbar)
(activity as? AppCompatActivity)?.setSupportActionBar(toolbar)
(activity as? AppCompatActivity)?.supportActionBar?.show()
-> onCreateOptionsMenu()
override fun onCreateOptionsMenu(menu: Menu, inflater: MenuInflater) {
inflater.inflate(R.menu.app_main_menu,menu)
super.onCreateOptionsMenu(menu, inflater)
}
->onOptionsItemSelected()
override fun onOptionsItemSelected(item: MenuItem): Boolean {
return when (item.itemId) {
R.id.selected_id->{//to_do}
else -> super.onOptionsItemSelected(item)
}
}
如果您正在使用自定义工具栏或操作栏,并且您想从片段获取工具栏/操作栏的引用,则需要先从片段的onCreateView方法中获取主活动的实例,如下所示。
MainActivity activity = (MainActivity) getActivity();
然后像下面这样使用活动进行进一步的实现
ImageView vRightBtn = activity.toolbar.findViewById(R.id.toolbar_right_btn);
在调用此方法之前,您需要在MainActivity中初始化自定义工具栏,如下所示。
首先,将您的工具栏设置为公共的,例如:
public Toolbar toolbar;
public ActionBar actionBar;
在编程中,在onCreate()方法中分配自定义工具栏ID。
toolbar = findViewById(R.id.custom_toolbar);
setSupportActionBar(toolbar);
actionBar = getSupportActionBar();
就是这样。它将在Fragment中运行。