android-fragments 如何在片段中使用setSupportActionBar

woobm2wo  于 2022-11-14  发布在  Android
关注(0)|答案(5)|浏览(265)

我需要在片段中使用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);

        }

    }
sqougxex

sqougxex1#

您可以像这样在片段中设置SupportActionbar:

((AppCompatActivity)getActivity()).setSupportActionBar(mToolbar);

你需要在FragmentonCreateView中膨胀tabbar_layout,如下所示:

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

daolsyd02#

suggested solution可以工作,但看起来不太好,理想情况下片段不应该知道它的父Activity的任何信息。另一种选择可能是根本不使用setSupportActionBar。如果你使用navigation库,那么在片段布局中添加一个Toolbar并使用NavigationUI来设置它可能会更容易,例如:
第一个
你可以找到完整的GitHub示例here。也可以看看另一个问题Is setSupportActionbar required anymore?和我的answer来了解更多细节。

wkyowqbh

wkyowqbh3#

This site has the solution which worked for me!
粘贴:

toolbar = (Toolbar) getView().findViewById(R.id.toolbar);

AppCompatActivity activity = (AppCompatActivity) getActivity();

activity.setSupportActionBar(toolbar);
vojdkbi0

vojdkbi04#

Kotlin中导航菜单的设置支持操作栏:

(activity as AppCompatActivity?)!!.setSupportActionBar(customToolbar as Toolbar?)

此外,要在DrawerLayout切换时设置汉堡包图标的动画,请执行以下操作:

val actionBarDrawerToggle: ActionBarDrawerToggle = object : ActionBarDrawerToggle(activity,
                drawer_layout, customToolbar as Toolbar?, R.string.open_drawer, R.string.close_drawer) { }
    
drawer_layout.addDrawerListener(actionBarDrawerToggle)
actionBarDrawerToggle.syncState()
ecr0jaav

ecr0jaav5#

在片段的onCreateView函数中添加以下内容:

override fun onCreateView(
        inflater: LayoutInflater,
        container: ViewGroup?,
        savedInstanceState: Bundle?
    ): View {
        //Set toolbar
        val view: View = inflater.inflate(R.layout.*enter the fragment containing toolbar here*, container, false)
        val toolbar: Toolbar = view.findViewById<Toolbar>(R.id.toolbar)
        (requireActivity() as AppCompatActivity).setSupportActionBar(toolbar)
        return view
    }

相关问题