Android studio 正在努力将代码从AppcompatActivity转换为片段。无法使用setSupportActionBar(工具栏)

Android studio 正在努力将代码从AppcompatActivity转换为片段。无法使用setSupportActionBar(工具栏),android-studio,kotlin,android-fragments,appcompatactivity,Android Studio,Kotlin,Android Fragments,Appcompatactivity,我正在尝试从使用AppComataActivity过渡到Fragment,因为我正在更新我的应用程序,但遇到了一个问题。当我尝试运行我的应用程序时,我会得到一个“未解析引用:supportFragmentManager”和“未解析引用:setSupportActionBar”(这就是Logcat向我显示的全部内容)。现在我选择切换到使用片段,因为我还想更改应用程序的UI,使用速度比以前的版本快。无论如何,这是我的代码: 记录器片段 package com.khumomashapa.not

我正在尝试从使用AppComataActivity过渡到Fragment,因为我正在更新我的应用程序,但遇到了一个问题。当我尝试运行我的应用程序时,我会得到一个“未解析引用:supportFragmentManager”和“未解析引用:setSupportActionBar”(这就是Logcat向我显示的全部内容)。现在我选择切换到使用片段,因为我还想更改应用程序的UI,使用速度比以前的版本快。无论如何,这是我的代码:

记录器片段

    package com.khumomashapa.notes.fragments

import android.os.Build
import android.os.Bundle
import androidx.fragment.app.Fragment
import android.view.LayoutInflater
import android.view.View
import android.view.ViewGroup
import android.widget.Toolbar
import androidx.annotation.RequiresApi
import androidx.fragment.app.FragmentManager
import androidx.fragment.app.FragmentPagerAdapter
import androidx.viewpager.widget.ViewPager
import com.astuetz.PagerSlidingTabStrip
import com.khumomashapa.notes.R
import kotlinx.android.synthetic.main.toolbar3.*


class RecorderFragment : Fragment() {

    private var tabs: PagerSlidingTabStrip? = null
    private var pager: ViewPager? = null

    @RequiresApi(Build.VERSION_CODES.LOLLIPOP)
    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        activity?.title = "Recorder";

        pager = pager?.findViewById<View>(R.id.pager) as ViewPager
        pager!!.adapter = MyAdapter(supportFragmentManager)
        tabs = tabs?.findViewById<View>(R.id.tabs) as PagerSlidingTabStrip
        tabs!!.setViewPager(pager)
        val toolbar = toolbar?.findViewById<View>(R.id.toolbar) as Toolbar
        toolbar.popupTheme = R.style.ThemeOverlay_AppCompat_Light
        setSupportActionBar(toolbar)




    }


    override fun onCreateView(
        inflater: LayoutInflater, container: ViewGroup?,
        savedInstanceState: Bundle?
    ): View? {



        // Inflate the layout for this fragment
        return inflater.inflate(R.layout.fragment_recorder, container, false)
    }

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

    }

    inner class MyAdapter(fm: FragmentManager?) : FragmentPagerAdapter(
        fm!!
    ) {
        private val titles = arrayOf(
            getString(R.string.tab_title_record),
            getString(R.string.tab_title_saved_recordings)
        )

        override fun getItem(position: Int): Fragment {
            when (position) {
                0 -> {
                    return RecordFragment.newInstance(position)
                }
                1 -> {
                    return FileViewerFragment.newInstance(position)
                }
            }
            return null!!
        }

        override fun getCount(): Int {
            return titles.size
        }

        override fun getPageTitle(position: Int): CharSequence? {
            return titles[position]

        }
    }

    companion object {
        private val LOG_TAG = RecorderFragment::class.java.simpleName
    }
}
package com.khumomashapa.notes.fragments
导入android.os.Build
导入android.os.Bundle
导入androidx.fragment.app.fragment
导入android.view.LayoutInflater
导入android.view.view
导入android.view.ViewGroup
导入android.widget.Toolbar
导入androidx.annotation.RequiresApi
导入androidx.fragment.app.FragmentManager
导入androidx.fragment.app.FragmentPagerAdapter
导入androidx.viewpager.widget.viewpager
导入com.astuetz.PagerSlidingTabStrip
导入com.khumomashapa.notes.R
导入kotlinx.android.synthetic.main.toolbar3*
类RecorderFragment:Fragment(){
专用变量选项卡:PagerSlidingTabStrip?=null
专用变量寻呼机:视图寻呼机?=null
@RequiresApi(Build.VERSION\u code.LOLLIPOP)
重写创建时的乐趣(savedInstanceState:Bundle?){
super.onCreate(savedInstanceState)
活动?.title=“记录器”;
pager=pager?.findViewById(R.id.pager)作为ViewPager
寻呼机!!.adapter=MyAdapter(supportFragmentManager)
tabs=tabs?.findViewById(R.id.tabs)作为页面LidingTabstrip
制表符!!.setViewPager(寻呼机)
val toolbar=toolbar?.findViewById(R.id.toolbar)作为工具栏
toolbar.popupTheme=R.style.ThemeoOverlay\u AppCompat\u灯光
设置支持操作栏(工具栏)
}
覆盖创建视图(
充气器:布局充气器,容器:视图组?,
savedInstanceState:捆绑?
):查看{
//为该碎片膨胀布局
返回充气机。充气(R.layout.fragment_记录器,容器,假)
}
覆盖已创建的视图(视图:视图,保存状态:捆绑?){
super.onViewCreated(视图,savedInstanceState)
}
内部类MyAdapter(fm:FragmentManager?):FragmentPagerAdapter(
调频!!
) {
私有val标题=数组(
getString(R.string.tab\u title\u record),
getString(R.string.tab\u标题\u保存的\u录制)
)
覆盖趣味getItem(位置:Int):片段{
何时(职位){
0 -> {
返回RecordFragment.newInstance(位置)
}
1 -> {
返回FileViewerFragment.newInstance(位置)
}
}
返回空值!!
}
重写fun getCount():Int{
返回标题。大小
}
覆盖有趣的getPageTitle(位置:Int):字符序列{
返回标题[职位]
}
}
伴星{
private val LOG_TAG=RecorderFragment::class.java.simpleName
}
}

这个类的目的是显示一个视图寻呼机,它可以在我已经创建的其他片段之间切换。我能够修复与此相关的其他错误,如“findViewById的未解析引用”和“MyAdapter类”。

对于
片段,实际上有两个相关的片段管理器。决定使用哪一个取决于您的用例

子片段管理器 片段有一个子片段管理器,负责管理其子/嵌套片段。您可以通过以下方式获得此信息:

Fragment.getChildFragmentManager()
父级的片段管理器 片段还包含对其父片段管理器的引用。如果片段是活动的直接子级,则his表示活动片段管理器。否则,如果片段是另一个片段的子片段,则表示父片段的子片段管理器。这可以通过以下方式获得:

Fragment.getParentFragmentManager()

请注意,尽管
Fragment
具有该方法,但不推荐使用该方法,而支持
Fragment.getParentFragmentManager()
,因此不应使用该方法


通过使用
fragment.getAcitivity()
获取对片段活动的引用,然后调用
activity.getSupportFragmentManager()
,您也可以从技术上获取活动片段管理器。但通常情况下,父片段管理器更有用、更清晰。

我修复了引用问题,但现在我收到了“pager=pager!!”的空指针异常错误!!。findViewById(R.id.pager)作为ViewPager'这将始终引发异常,
pager
为null,并且您声明它不与
一起。您似乎试图在寻呼机内部找到没有任何意义的
寻呼机。您应该使用
Activity.findViewById(int)
。它可以工作。你所有的答案都有效。谢谢你,伙计。我将尝试标记您的评论,因为正确答案创建还没有片段中的视图,因此这不会在我应用您的解决方案后操作栏才开始给出的框中起作用。我将尝试更改我的标题,以便大家都能轻松回答。我只想问一个新问题,因为我的问题与此无关。我必须再次问另一个问题。如果把它加到这个上面,会有点混乱。