MPandroid Graph 不显示片段中的数据,只有蓝色圆圈

MPandroidGraph not showing data in fragment, only blue circle

我试图将饼图放入片段中,但我不知道如何让它显示数据。如果它工作正常,它会显示红色和绿色,但它是蓝色的。从我能找到的一切来看,我做的一切都是正确的,但它所做的只是显示一个蓝色饼图。

我最初不知道如何访问片段中的视图 class 所以我可以找到饼图,但我想通了,这就是它给我的。

我尝试更改 PieEntry 中的参数,但没有修复它

在我的 fragment_first.xml 文件中,我有这个

<com.github.mikephil.charting.charts.PieChart
        android:id="@+id/PieChartBaby"
        android:layout_width="200dp"
        android:layout_height="200dp"
        android:layout_marginStart="16dp"
        android:layout_marginLeft="16dp"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toTopOf="parent" />

在FirstFragment.kt我有

class FirstFragment() : Fragment() {

    private var _binding: FragmentFirstBinding? = null
    lateinit var pieChartHandler: PieChartHandler
    val debugTag = "FirstFragment_DEBUG"
    // This property is only valid between onCreateView and
    // onDestroyView.
    private val binding get() = _binding!!

    override fun onCreateView(
        inflater: LayoutInflater, container: ViewGroup?,
        savedInstanceState: Bundle?
    ): View? {
        _binding = FragmentFirstBinding.inflate(inflater, container, false)
        pieChartHandler = PieChartHandler(binding.root)
        return binding.root
    }

    override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
        super.onViewCreated(view, savedInstanceState)
        binding.buttonFirst.setOnClickListener {
            findNavController().navigate(R.id.action_FirstFragment_to_SecondFragment)
        }

        pieChartHandler.generatePieData(3445.0f, 6000.0f)
        pieChartHandler.triggerAnimate()

    }

    fun goToNextView() {
        findNavController().navigate(R.id.action_FirstFragment_to_SecondFragment)
    }

    override fun onDestroyView() {
        super.onDestroyView()
        _binding = null
    }
}

我正在使用非 activity class 来处理所有饼图内容

class PieChartHandler(view: View){
    val view = view
    val debugTag = "PieChartHandler_DEBUG"
    var pieChart = view.findViewById<PieChart>(R.id.PieChartBaby)
    val currentStepsText = view.findViewById<TextView>(R.id.currentStepsText)
    val stepsGoalText = view.findViewById<TextView>(R.id.stepGoalText)
    
    fun generatePieData(steps: Float, goal: Float) {
        Log.d(debugTag, "Generating pie chart data... Steps: $steps, goal $goal")
        val pieElements = ArrayList<PieEntry>()
        val pieColors = ArrayList<Int>()
        if (steps <= goal) {
//          if goal has not been met, calculate normally
            pieElements.add(PieEntry(steps, ""))
            pieElements.add(PieEntry(goal - steps, ""))
        } else {
//          if goal has been met, set red to none to avoid weird pie chart
            pieElements.add(PieEntry(steps, ""))
            pieElements.add(PieEntry(0f, ""))
        }
        pieColors.add(R.color.good_green)
        pieColors.add(R.color.to_go_red)

        val pieDataSet = PieDataSet(pieElements, "")
        pieDataSet.colors = pieColors
        val pieData = PieData(pieDataSet)
        pieData.setValueTextSize(0f)
        pieChart.data = pieData
        pieChart.invalidate()

        currentStepsText.text = pieElements[0].toString()
        stepsGoalText.text = pieElements[1].toString()

        formatPieData()
    }

    private fun formatPieData() {
        pieChart.setUsePercentValues(false)
        pieChart.setDrawMarkers(false)
        pieChart.isDrawHoleEnabled = true
        pieChart.setHoleColor(R.color.design_default_color_background)
        pieChart.holeRadius = 70f
        pieChart.description.isEnabled = false
        pieChart.setDrawEntryLabels(false)
        pieChart.legend.isEnabled = false
    }

    fun triggerAnimate() {
        Log.d(debugTag, "Pie chart animation triggered")
        pieChart.animateY(1000, com.github.mikephil.charting.animation.Easing.EaseInOutQuad)
    }
}

有人知道我哪里出错了吗?

编辑:在设置 pieChart.data 之前移动 formatPieData() 无效

错误是使用 R class 调用 R.color.{color}

如果您使用 Color.parseColor("#color") 它可以正常工作

这花了太长时间才搞清楚

我需要休息一下