如何在fragment中使用setSupportActionBar

Sul*_*eer 22 android android-fragments android-actionbar

我需要在片段中使用setSupportActionBar,我无法也无法使用setContentView请帮助它也谢谢你提前给出相关代码

public class StudentrFragment extends Fragment {
        Toolbar toolbar;
        TabLayout tabLayout;
        ViewPager viewPager;
        ViewPagerAdapter viewPagerAdapter;


        public StudentrFragment() {
            // Required empty public constructor
        }


        @Override
        public void onCreate(Bundle savedInstanceState){
            super.onCreate(savedInstanceState);
            setContentView(R.layout.tabbar_layout);
            toolbar = (Toolbar) findViewById(R.id.toolbar);
            setSupportActionBar(toolbar); 
            tabLayout = (TabLayout) findViewById(R.id.tabLayout);
            viewPager = (ViewPager) findViewById(R.id.viewPager);
            viewPagerAdapter = new ViewPagerAdapter(getSupportFragmentManager());
            viewPagerAdapter.addFragments(new CivilFragment(),"Civil Dept");
            viewPagerAdapter.addFragments(new ComputerFragment(),"CSE Dept");
            viewPagerAdapter.addFragments(new EeeFragment(),"EEE Dept");
            viewPagerAdapter.addFragments(new EceFragment(),"ECE Dept");
            viewPager.setAdapter(viewPagerAdapter);
            tabLayout.setupWithViewPager(viewPager);

        }

    }
Run Code Online (Sandbox Code Playgroud)

Mus*_*sir 108

你可以在片段中像这样设置SupportSuctionbar:

((AppCompatActivity)getActivity()).setSupportActionBar(mToolbar);
Run Code Online (Sandbox Code Playgroud)

您需要膨胀tabbar_layout 中onCreateView的Fragment.像这样:

@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
    Bundle savedInstanceState) {
View rootView = inflater.inflate(R.layout.tabbar_layout, container, false);
 //YOUR STUFF
return rootView;
}
Run Code Online (Sandbox Code Playgroud)


Val*_*kov 6

该建议的解决方案的工作原理,但它看起来并不优雅,理想的片段应该不知道它的父活动什么。另一种选择可能是根本不使用setSupportActionBar。如果您使用导航库,将工具栏添加到片段布局并使用NavigationUI设置它可能会更容易,例如:

<!-- my_fragment.xml -->
<androidx.constraintlayout.widget.ConstraintLayout ... >

  <com.google.android.material.appbar.MaterialToolbar
    android:id="@+id/toolbar"
    app:menu="@menu/my_fragment_menu"
    ... />

</androidx.constraintlayout.widget.ConstraintLayout>
Run Code Online (Sandbox Code Playgroud)
class MyFragment : Fragment() {
  ...

  override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
    super.onViewCreated(view, savedInstanceState)

    val navController = findNavController()
    binding.toolbar.setupWithNavController(navController)

    binding.toolbar.setOnMenuItemClickListener {
      when (it.itemId) {
        // these ids should match the item ids from my_fragment_menu.xml file
        R.id.edit -> {
          Log.i("MyFragment", "edit menu item is clicked")

          // by returning 'true' we're saying that the event 
          // is handled and it shouldn't be propagated further
          true
        }
        else -> false
      }
    }

    // if you prefer not to use xml menu file 
    // you can also add menu items programmatically
    val shareMenuItem = binding.toolbar.menu.add(R.string.share)
    shareMenuItem.setOnMenuItemClickListener {
      Log.i("MyFragment", "share menu item is clicked")
      true
    }
  }
}
Run Code Online (Sandbox Code Playgroud)

您可以在此处找到完整的 GitHub 示例。也看看另一个问题不再需要 setSupportActionbar 了吗?和我的答案以获取更多详细信息。