【问题标题】:Context issue with Fragment片段的上下文问题
【发布时间】:2021-08-23 03:36:15
【问题描述】:

这里是初学者。

我正在尝试使用本指南实现带有图像的微调器;

https://dzone.com/articles/custom-spinner-for-android-application

如果在我的 MainActivity 中实现,我可以正常工作。

当我尝试在我的片段“Fragment1”中实现此功能时出现问题。

初始化微调器的代码如下:

moodSpinner.adapter = MoodArrayAdapter(this, listOf(
            Mood(R.drawable.angry, "Angry"),
            Mood(R.drawable.happy, "Happy"),
            Mood(R.drawable.playful, "Playful"),
            Mood(R.drawable.wondering, "Wondering")
        )
    )

如果该代码在我的 mainactivity.kt 中,并且在 activity_main.xml 中具有 id moodSpinner 的微调器对象,则一切正常。如果我将代码移动到我的 fragment.kt,并将微调器移动到 fragment.xml,它会失败。

我怀疑这个问题与“this”被用作上下文有关。

“java.lang.NullPointerException:尝试在空对象引用上调用虚拟方法 'void android.widget.Spinner.setAdapter(android.widget.SpinnerAdapter)'”

我尝试将 'this' 更改为 'this.requireActivity()' 但没有任何变化。

谢谢。

【问题讨论】:

  • 发布片段的完整代码和错误堆栈跟踪

标签: android kotlin android-fragments


【解决方案1】:

已修复。对于那些在片段中遇到相同上下文问题的人,我通过做两件事来解决它。

首先,我把上面的代码放到了 'onViewCreated' 方法中,而不是 'onCreate' 方法中。

其次,我将 'this' 替换为 'requireActivity().baseContext' 以将正确的上下文传递给 ArrayAdapter。

修改后的代码看起来像 ;

 moodSpinner.adapter = MoodArrayAdapter(requireActivity().baseContext, listOf(
            Mood(R.drawable.angry, "Angry"),
            Mood(R.drawable.happy, "Happy"),
            Mood(R.drawable.playful, "Playful"),
            Mood(R.drawable.wondering, "Wondering")
        )

【讨论】:

  • 顺便说一句,我看到了你的回答。对于片段,您不应该在onCreate() 中设置任何视图(例如,将适配器设置到视图中)。因为在片段的onCreate() 中,视图还没有被初始化。片段的视图由onCreateView() 初始化。而在onViewCreated() 是您设置视图的适配器之类的最合适的时间,视图的onClick,...。
猜你喜欢
  • 2020-04-08
  • 2016-10-19
  • 1970-01-01
  • 1970-01-01
  • 2015-08-29
  • 1970-01-01
  • 2013-10-24
  • 2016-08-19
  • 2012-05-10
相关资源
最近更新 更多