Отображение гистограммы после фрагмента - PullRequest
0 голосов
/ 21 декабря 2018

Я пытаюсь отобразить данные 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
    }
}

1 Ответ

0 голосов
/ 21 декабря 2018

попробуйте использовать barChart.invalidate(); после добавления данных

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

Надеюсь, это поможет

...