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")
它可以正常工作
这花了太长时间才搞清楚
我需要休息一下
我试图将饼图放入片段中,但我不知道如何让它显示数据。如果它工作正常,它会显示红色和绿色,但它是蓝色的。从我能找到的一切来看,我做的一切都是正确的,但它所做的只是显示一个蓝色饼图。
我最初不知道如何访问片段中的视图 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")
它可以正常工作
这花了太长时间才搞清楚
我需要休息一下