如何在片段

时间:2016-03-01 16:33:27

标签: android fragment toolbar appcompatactivity

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

  

致命例外:主要   处理: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)
  at java.lang.reflect.Method.invokeNative(Native Method)
  在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)
  at dalvik.system.NativeStart.main(Native Method)
  引起: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)   在   android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:1067)   在   android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:1248)   在   android.support.v4.app.BackStackRecord.run(BackStackRecord.java:738)
  在   android.support.v4.app.FragmentManagerImpl.execPendingActions(FragmentManager.java:1613)   在   android.support.v4.app.FragmentController.execPendingActions(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)
  at java.lang.reflect.Method.invokeNative(Native Method)
  在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;
}

有人可以帮我解决这个问题吗? 非常感谢!

2 个答案:

答案 0 :(得分:0)

您的Activity似乎不会扩展AppCompatActivity。使您的活动从支持库而不是Activity扩展AppCompatActivity。

答案 1 :(得分:0)

工具栏添加在操作栏中,而ActionBar是一个Activity属性。如果要将给定片段中的工具栏设置为拥有Activity的ActionBar,则获取拥有该片段的Activity(Fragment.getActivity())并设置其ActionBar属性。

如果您的应用在该活动中有多个片段,您显然必须谨慎管理。

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