DialogFragment中自定义MP Chart样式修改不生效问题求助
问题根因
你的代码存在重复覆盖LineData配置的核心问题,具体问题点如下:
- 你在
setData()方法中已经完成了带自定义样式的LineDataSet(set1)配置,且已经给图表设置了对应的数据,所有线条颜色、渐变填充的配置都在这个步骤里生效 - 但
setData()执行结束后,你在onCreateView的末尾又重新创建了一个无任何自定义样式的LineDataSet,再次调用lineChart.setData()直接覆盖了之前的配置,导致所有样式失效 - 缺少MPAndroidChart修改配置后必须的重绘触发调用
invalidate()
修复方案
直接删除onCreateView末尾冗余的3行数据集配置代码,最后补充触发图表重绘的调用即可:
@Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { view = inflater.inflate(R.layout.fragment_scripchart, container, false); getDialog().getWindow().setBackgroundDrawable(new ColorDrawable(Color.TRANSPARENT)); context = getContext(); drawablePositive = ContextCompat.getDrawable(context, R.drawable.symbolchart_bg); lineChart = view.findViewById(R.id.symbolChart); setData(20,3); // 下面的原有配置保留即可,冗余的重复配置可以自行清理 lineChart.getDescription().setEnabled(true); lineChart.setDrawGridBackground(true); lineChart.setDragEnabled(true); lineChart.getLegend().setEnabled(true); lineChart.setScaleEnabled(true); lineChart.setScaleYEnabled(true); lineChart.setScaleXEnabled(true); lineChart.setDrawGridBackground(false); lineChart.getXAxis().setEnabled(true); lineChart.getLineData().setDrawValues(true); lineChart.getXAxis().setDrawGridLines(true); lineChart.getXAxis().setDrawAxisLine(true); lineChart.getAxisLeft().setDrawGridLines(true); lineChart.getAxisRight().setDrawGridLines(true); lineChart.getAxisRight().setDrawZeroLine(true); lineChart.getAxisLeft().setDrawZeroLine(true); lineChart.getAxisRight().setDrawLabels(true); lineChart.getAxisLeft().setDrawLabels(true); lineChart.getAxisLeft().setEnabled(true); lineChart.getAxisRight().setEnabled(true); lineChart.setMaxHighlightDistance(150); lineChart.setViewPortOffsets(0, 0, 0, 0); lineChart.setTouchEnabled(false); lineChart.setPinchZoom(false); lineChart.notifyDataSetChanged(); // 删除下面这3行冗余代码!!! // LineDataSet lineDataSet = new LineDataSet(entryList,"BuySell"); // lineData = new LineData(lineDataSet); // lineChart.setData(lineData); // 补充这行触发图表重绘 lineChart.invalidate(); return view; }
另外你代码里存在setDrawGridBackground先后赋值true又赋值false这类冗余配置,可以自行清理,不影响功能。
内容的提问来源于stack exchange,提问作者AYESHA SIDDIQUI
相关产品推荐
相关产品推荐

