android-fragments 我无法引用适配器

z2acfund  于 2022-11-14  发布在  Android
关注(0)|答案(1)|浏览(156)

我有一个在onCreate中初始化的适配器和一个在onViewCreated中初始化的列表视图。我尝试setAdapter,但无法在onViewCreated中传递适配器。我尝试了多种方法,如将它们从onCreate移动到onViewCreated中,但如果在其他位置初始化适配器,应用程序似乎会崩溃,并且除了在onViewCreated中之外,我无法在任何位置使用findViewById

class Istoric : Fragment() {
    var array= arrayOf("item1","item2")


    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        val adapter = ArrayAdapter(MainActivity(),R.layout.listview_item,array)
    }

    override fun onCreateView(
        inflater: LayoutInflater, container: ViewGroup?,
        savedInstanceState: Bundle?
    ): View? {
        // Inflate the layout for this fragment
        return inflater.inflate(R.layout.fragment_istoric, container, false)
    }

    override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
        super.onViewCreated(view, savedInstanceState)
        val lv1: ListView = view.findViewById(R.id.lv)
        lv1.setAdapter(adapter)
    }
}
wydwbb8l

wydwbb8l1#

您的adapter对象是onCreate(...)的局部变量,因此无法在其他地方访问它。您可以将它移动到类变量中,如下所示:

class Istoric : Fragment() {
    var array= arrayOf("item1","item2")

    private lateinit var adapter: ArrayAdapter

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        adapter = ArrayAdapter(requireContext(), R.layout.listview_item, array)
    }

    override fun onCreateView(
        inflater: LayoutInflater, container: ViewGroup?,
        savedInstanceState: Bundle?
    ): View? {
        // Inflate the layout for this fragment
        return inflater.inflate(R.layout.fragment_istoric, container, false)
    }

    override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
        super.onViewCreated(view, savedInstanceState)
        val lv1: ListView = view.findViewById(R.id.lv)
        lv1.setAdapter(adapter)
    }
}

我还在ArrayAdapter构造函数中添加了requireContext()调用,因为您不希望在那里创建MainActivity的新示例。

相关问题