【问题标题】:Showing Bar Chart after the Fragment Click片段点击后显示条形图
【发布时间】:2019-05-21 12:45:03
【问题描述】:

我正在尝试以图表格式显示 JSON 数据。这里的问题是当加载片段时,我得到没有可用的图表数据,但是,如果我单击片段,则填充图表。我不确定是什么阻止了图表的初始加载。代码未显示任何错误,但片段在单击后显示图表。任何帮助表示赞赏。

主要片段

class TestFragment : Fragment() {
    var volleyRequest: RequestQueue?=null
    val TestLink="https://www.abc.app"
    companion object {
        val TAG: String = TestFragment::class.java.simpleName
        fun newInstance() = TestFragment()
    }
    lateinit var requestQueue: RequestQueue
    override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
        super.onViewCreated(view, savedInstanceState)
        activity?.title=getString(R.string.title_home)
        val view=layoutInflater.inflate(R.layout.fragment_Test,container,false)
        requestQueue=Volley.newRequestQueue(this.context)
        getTestData(TestLink,
                {
                    body -> Log.d("Network", "Success: $body")
        var    test= "[{\"date\":\"2018-12-12\",\"students\":\"10\"},{\"date\":\"2018-12-13\",\"students\":\"12\"},{\"date\":\"2018-12-14\",\"students\":\"13\"},{\"date\":\"2018-12-15\",\"students\":\"14\"},{\"date\":\"2018-12-16\",\"students\":\"11\"},{\"date\":\"2018-12-17\",\"students\":\"22\"},{\"date\":\"2018-12-18\",\"students\":\"33\"}]"
        val jsonStringArray = test.toString()
        val entries = ArrayList<BarEntry>()
        val labels = ArrayList<String>()
        val arr = JSONArray(jsonStringArray)
        for (i in 0 until arr.length()) {
            entries.add(BarEntry(arr.getJSONObject(i).getInt("students").toFloat(), i))
            labels.add(arr.getJSONObject(i).getString("date"))
        }
        val barDataSet = BarDataSet(entries, "Test Data")
        val data = BarData(labels, barDataSet)
        barChart.data = data 
        barChart.setDescriptionTextSize(10f)
        barChart.setValueTextSize(10f)
        barChart.yLabels.textSize=10f

       // volleyRequest!!.add(stringReq)
                },
               { error -> Log.d("Network", "Error", error) }
        )
    }
    override fun onDestroy() {
        super.onDestroy()
        requestQueue.cancelAll { true }
    }
    fun getTestData(Url:String, onSuccess: (String) -> Unit, onError: (Throwable) -> Unit)
    {
        print("Url Value is:"+Url)
        val petRequest = StringRequest(Request.Method.GET, Url, Response.Listener {
 onSuccess(it)
         },
                Response.ErrorListener {
                  onError(it)
                })
requestQueue.add(petRequest)
     //   volleyRequest!!.add(petRequest)
    }
    override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?): View?
    {
        activity?.title = getString(R.string.title_home)
        val view = inflater.inflate(R.layout.fragment_Test, container, false)
        return view
    }
}

【问题讨论】:

    标签: android android-studio android-fragments kotlin android-volley


    【解决方案1】:

    添加数据后尝试使用barChart.invalidate();

     barChart.data = data 
     barChart.setDescriptionTextSize(10f)
     barChart.setValueTextSize(10f)
     barChart.yLabels.textSize=10f
     barChart.invalidate()
    

    希望对你有帮助

    【讨论】:

    • @JoshvaJo 很高兴为您提供帮助
    • 我还有一个问题。我得到如下 JSON 输出 var test= "[{"date":"2018-12-12","students":"10"}]" 我需要以下格式的输出 var test= "[{ \"日期\":\"2018-12-12\",\"学生\":\"10\"}]"。如何更改此值。
    • @JoshvaJo 对不起,你能告诉我为什么吗?因为第一个字符串是Json 格式,而第二个不是。
    • 当然,第二个在条形图中工作,而不是第一个。
    • 知道了,所以你可以像test.replace('"','\"')一样使用replace
    猜你喜欢
    • 2014-03-22
    • 1970-01-01
    • 2015-05-03
    • 1970-01-01
    • 2016-07-21
    • 2021-04-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多