使用Achartengine的Android片段 - 切换片段后图表消失

时间:2014-01-22 15:30:23

标签: android android-fragments achartengine lifecycle

我有一个带有Achartengine折线图的Android片段(复制自achartengine的官方示例)。我的活动一次显示一个片段,并使用菜单在这些片段之间切换。显示ChartFragment第一次工作正常,但是当我切换到另一个片段然后切换回我的ChartFragment时,chartview已经消失。

public class MainActivity {

    // ...

    public void replaceFragment(int position) {
        FragmentTransaction fragTransaction = mFragmentManager
                .beginTransaction();
        fragTransaction.replace(R.id.fragment_container,
                fragments.valueAt(position));
        fragTransaction.commit();
    }

    // ...
}

public class ChartFragment extends Fragment {

    // ...

    @Override
    protected void onResume() {
        super.onResume();

        View view = this.getView();

        if (mChartView == null) {
            LinearLayout layout = (LinearLayout) view.findViewById(R.id.chart);
            mChartView = ChartFactory.getLineChartView(this, mDataset,
                    mRenderer);
            layout.addView(mChartView, new LayoutParams(
                    LayoutParams.MATCH_PARENT, LayoutParams.MATCH_PARENT));
        } else {
                    mChartView.repaint();
        }
    }       

    // ...
}

onResume()的第一次调用正常,图表已创建并显示。如果再次调用onResume(),则图表会消失。调用repaint()没有帮助(mChartView不为空)。切换回此片段后如何显示图表?

提前致谢!

1 个答案:

答案 0 :(得分:0)

使用它代替你的replaceFragment()

 public void replaceFragment(int position) {
     FragmentTransaction fragTransaction = mFragmentManager
             .beginTransaction();
     fragTransaction.replace(R.id.frame, fragments.get(position));
     fragTransaction.addToBackStack(null).commit();
 }

和onresume()

public void onResume()
    {
        super.onResume();
        System.out.println("onResume called");
        View view = this.getView();
        if(mChartView == null)
        {
            LinearLayout layout = (LinearLayout) view.findViewById(R.id.chart);
            mChartView = ChartFactory.getLineChartView(getActivity(), mDataset, mRenderer);
            layout.addView(mChartView, new LayoutParams(LayoutParams.MATCH_PARENT, LayoutParams.MATCH_PARENT));
        }
        else
        {
            mChartView.repaint();
        }
    }