Android 如何在片段中设置工具栏

Android 如何在片段中设置工具栏,android,fragment,toolbar,appcompatactivity,Android,Fragment,Toolbar,Appcompatactivity,我正在用一些片段制作一个项目,每个片段都有自己的工具栏。但当我在片段中使用AppCompatActivity设置SupportActionBar时,我面临以下强制关闭问题: 致命异常:主 进程:com.example.admin.prototypedemo,PID:6090 java.lang.RuntimeException:无法启动活动 ComponentInfo{com.example.admin.prototypedemo/com.example.admin.prototypedemo.

我正在用一些片段制作一个项目,每个片段都有自己的工具栏。但当我在片段中使用AppCompatActivity设置SupportActionBar时,我面临以下强制关闭问题:

致命异常:主
进程:com.example.admin.prototypedemo,PID:6090
java.lang.RuntimeException:无法启动活动 ComponentInfo{com.example.admin.prototypedemo/com.example.admin.prototypedemo.activity.TopScreenActivity}: java.lang.ClassCastException: com.example.admin.prototypedemo.activity.TopScreenActivity不能为空 转换为android.support.v7.app.AppCompatActivity
在 android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2413) 在 android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2471) 在android.app.ActivityThread.access$900(ActivityThread.java:175)
在 android.app.ActivityThread$H.handleMessage(ActivityThread.java:1308)
位于android.os.Handler.dispatchMessage(Handler.java:102)
在android.os.Looper.loop(Looper.java:146)
在android.app.ActivityThread.main(ActivityThread.java:5602)上
位于java.lang.reflect.Method.Invokenactive(本机方法)
在java.lang.reflect.Method.invoke(Method.java:515)
在 com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1283 位于com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1099)
在dalvik.system.NativeStart.main(本机方法)
原因:java.lang.ClassCastException: com.example.admin.prototypedemo.activity.TopScreenActivity不能为空 转换为android.support.v7.app.AppCompatActivity
在 com.example.admin.prototypedemo.fragment.TopScreenFragment.onCreateView(TopScreenFragment.java:50) 在 android.support.v4.app.Fragment.performCreateView(Fragment.java:1962) 在 FragmentManagerImpl.moveToState(FragmentManager.java:1067) 在 android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:1248) 在 android.support.v4.app.BackStackRecord.run(BackStackRecord.java:738)
在 FragmentManagerImpl.execPendingActions(FragmentManager.java:1613) 在 android.support.v4.app.FragmentController.ExecutPendingActions(FragmentController.java:330) 在 android.support.v4.app.FragmentActivity.onStart(FragmentActivity.java:547) 在 android.app.Instrumentation.callActivityOnStart(Instrumentation.java:1177) 在android.app.Activity.performStart(Activity.java:5461)
在 android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2386) 在 android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2471) 在android.app.ActivityThread.access$900(ActivityThread.java:175)
在 android.app.ActivityThread$H.handleMessage(ActivityThread.java:1308) 位于android.os.Handler.dispatchMessage(Handler.java:102)
在android.os.Looper.loop(Looper.java:146)
在android.app.ActivityThread.main(ActivityThread.java:5602)上
位于java.lang.reflect.Method.Invokenactive(本机方法)
位于java.lang.reflect.Method.invoke(Method.java:515)

以下是我的代码:

 public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup parent, @Nullable Bundle savedInstanceState) {
        View view = inflater.inflate(R.layout.top_screen_fragment_activity, parent, false);

        Toolbar toolbar = (Toolbar)view.findViewById(R.id.toolbar);
        toolbar.setTitle("Prototype");
        AppCompatActivity activity = (AppCompatActivity)getActivity();
        activity.setSupportActionBar(toolbar);
        activity.getSupportActionBar().setDisplayHomeAsUpEnabled(true);
        return view;
}
有人能帮我解决这个问题吗?
非常感谢!

您的活动似乎没有扩展AppCompatActivity。请让您的活动从支持库扩展AppCompatActivity,而不是“活动”。

工具栏添加在actionbar中,而actionbar是一个活动属性。如果要将给定片段中的工具栏设置为所属活动的actionbar,请获取拥有片段的活动(fragment.getActivity())并设置其ActionBar属性

如果你的应用程序在该活动中有多个片段,你显然必须小心地管理它


而第二种解决方案是在活动中实现接口并从fragment类调用。

您的TopScreenActivity是否扩展了AppCompatActivity?我知道了。非常感谢。我知道了。非常感谢。