0

チャートにAchartEngineライブラリを使用しています。シークバーで選択した値でチャートを変更するためのシークバーがあります。シークバーを 1 つ選択するたびに、呼び出しがあってもチャートが再描画されず、チャートをmChartView.repaint(); 呼び出す前にチャートを削除することはできませんremoveAllViews(); 。最後の 1 つの新しいトップを作成するだけです。

これは私のコードです:

   SeekTime.setOnSeekBarChangeListener(new OnSeekBarChangeListener() {

        @Override
        public void onStartTrackingTouch(SeekBar seekBar) 
        {
        }

        @Override
        public void onProgressChanged(SeekBar seekBar, int progress, boolean fromUser)
        {
        }
        @Override
        public void onStopTrackingTouch(SeekBar seekBar) {
            if (SeekTime.getProgress() <= 3){
                SeekTime.setProgress(0);
                period=7;} 
            if (SeekTime.getProgress() > 3 && SeekTime.getProgress() <= 8){

                SeekTime.setProgress(5);
                period =30;
            }
            if (SeekTime.getProgress() >8 && SeekTime.getProgress()<=13){
                SeekTime.setProgress(10);
                period = 90;
            }
            if (SeekTime.getProgress() >13 && SeekTime.getProgress()<=18){
                SeekTime.setProgress(15);
                period = 180;
            }
            if (SeekTime.getProgress() >18 && SeekTime.getProgress()<=23){
                SeekTime.setProgress(20);
                period = 270;
            }
        if (SeekTime.getProgress() >23){
                SeekTime.setProgress(25);
                period = 360;
                }

            String url = baseURL+"id="+strLjiId+"&nilai="+period;
            new LoadData(url).execute();

        }

    });
    }   
    @Override
    protected void onResume() {
        // TODO Auto-generated method stub
        super.onResume();

        if (mChartView == null) {
             lnChart = (LinearLayout) findViewById(R.id.chart);
              mChartView = ChartFactory.getLineChartView(this, mDataset, mRenderer);
              lnChart.removeAllViews();
              lnChart.addView(mChartView, 0, new LayoutParams(LayoutParams.FILL_PARENT, LayoutParams.FILL_PARENT)); 
 } 
    else {
          mChartView.repaint();
            }
    }

    private class LoadData extends AsyncTask<Void, Void, String>{

        String url = "";

        public LoadData(String url) {
            // TODO Auto-generated constructor stub
            this.url = url;
        }

        @Override
        protected void onPreExecute() {
            // TODO Auto-generated method stub
            super.onPreExecute();

            dialog = ProgressDialog.show(NABActivityDetail.this, "", "Please wait");
        }

        @Override
        protected String doInBackground(Void... params) {
            // TODO Auto-generated method stub
            String result = "";
            try {
                result = Connection.get(url);
            } catch (Exception e) {
                // TODO: handle exception
                result = "";
                Log.d("TEST CHART", e.getMessage());
            }

            return result;
        }

        @Override
        protected void onPostExecute(String result) {
            // TODO Auto-generated method stub
            super.onPostExecute(result);

            fetchResponse(result.replace("\n", "").trim());
            dialog.dismiss();
        }

    }

    private void fetchResponse(String result) {
        // TODO Auto-generated method stub
        if (!result.equals("")) {
            try {
                JSONArray jsonArray = new JSONArray(result);
                NabDetail item = null;

                for (int i = 0; i < jsonArray.length(); i++) {

                    JSONObject jsonObject = jsonArray.getJSONObject(i);

            item = new NabDetail(jsonObject.optString("lji_invest"), 
                            jsonObject.optDouble("persen_hmin1"), 
                            jsonObject.optDouble("lnu_nilai"), 
                            jsonObject.optDouble("selisih"), 
                            jsonObject.optDouble("persen_hke1"),
                            jsonObject.optString("tanggal"),
                            jsonObject.optString("lji_id") 
                            );
                    listData.add(item);
                }
                renderChart(listData);

            } catch (Exception e) {
            }
        }   
    }


    private void renderChart(ArrayList<NabDetail> listData) {
        // TODO Auto-generated method stub

        String seriesTitle = "";
        XYSeries series = new XYSeries(seriesTitle);
        mDataset.addSeries(series);
        mCurrentSeries = series;
        XYSeriesRenderer renderer = new XYSeriesRenderer();
        renderer.setFillBelowLine(true);
        renderer.setFillBelowLineColor(Color.TRANSPARENT);
        renderer.setColor(Color.YELLOW);
        mRenderer.addSeriesRenderer(renderer);
        renderer.setFillPoints(true);
        mCurrentRenderer = renderer;

        for (int i = 0; i < listData.size(); i++) {

            mCurrentSeries.add(i,listData.get(i).getInuNilai() 
                    );
        }

    if (mChartView != null) {

             mChartView.repaint();
    }

私のコードに問題はありますか? または、前にグラフを削除して、新しいグラフを再描画または更新する方法はありますか?

これは私のチャートです: ここに画像の説明を入力

4

1 に答える 1

0

これmChartView.repaint()は、チャートを再描画する方法です。ただし、問題を回避するためにrenderer.setInScroll(true)、チャートをセットアップするときにも行う必要があります。

于 2013-06-07T09:49:29.990 に答える