2015-01-08 46 views
0

我想在彈出window..I顯示餅圖現在用的是 「achartengine-1.0.0」 這裏是我的代碼: -如何在彈出窗口中顯示Android餅圖?

AndroidPopupWindowActivity111.java

@SuppressLint("InflateParams") 
public class AndroidPopupWindowActivity111 extends Activity { 

    private static int[] COLORS = new int[] { Color.MAGENTA, Color.CYAN }; 
    LinearLayout layout; 
    private static String[] NAME_LIST = new String[] { "A", "B" }; 
    private CategorySeries mSeries = new CategorySeries(""); 
    private DefaultRenderer mRenderer = new DefaultRenderer(); 
    private GraphicalView mChartView; 



    private int[] VALUES = { 40, 60}; 


    /** Called when the activity is first created. */ 
    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.popup_main); 

     mRenderer.setApplyBackgroundColor(true); 
     mRenderer.setBackgroundColor(Color.argb(100, 50, 50, 50)); 
     mRenderer.setChartTitleTextSize(20); 
     mRenderer.setLabelsTextSize(15); 
     mRenderer.setLegendTextSize(15); 
     mRenderer.setMargins(new int[] { 20, 30, 15, 0 }); 
     mRenderer.setZoomButtonsVisible(true); 
     mRenderer.setStartAngle(90); 

     for (int i = 0; i < VALUES.length; i++) { 
     //mSeries.add(NAME_LIST[i] + " " + VALUES[i], VALUES[i]); 
      mSeries.add(NAME_LIST[i] + "(" + VALUES[i]+"%)", VALUES[i]); 
      SimpleSeriesRenderer renderer = new SimpleSeriesRenderer(); 
     renderer.setColor(COLORS[(mSeries.getItemCount() - 1) % COLORS.length]); 
     mRenderer.addSeriesRenderer(renderer); 
     } 

     if (mChartView != null) { 
     mChartView.repaint(); 
     } 

     final Button btnOpenPopup = (Button)findViewById(R.id.openpopup); 
     btnOpenPopup.setOnClickListener(new Button.OnClickListener(){ 

    @Override 
    public void onClick(View arg0) { 
    LayoutInflater layoutInflater 
    = (LayoutInflater)getBaseContext() 
     .getSystemService(LAYOUT_INFLATER_SERVICE); 
    View popupView = layoutInflater.inflate(R.layout.main_piechart, null); 
      final PopupWindow popupWindow = new PopupWindow(popupView, LayoutParams.WRAP_CONTENT,LayoutParams.WRAP_CONTENT); 
      layout = (LinearLayout) findViewById(R.id.chart); 
      Button btnDismiss = (Button)popupView.findViewById(R.id.dismiss); 
      btnDismiss.setOnClickListener(new Button.OnClickListener(){ 

    @Override 
    public void onClick(View v) { 
     // TODO Auto-generated method stub 
     popupWindow.dismiss(); 
    }}); 

      popupWindow.showAsDropDown(btnOpenPopup, 50, -30); 

    }}); 
    } 

    @SuppressLint("ShowToast") 
    @Override 
    protected void onResume() { 
    super.onResume(); 
    if (mChartView == null) { 

    mChartView = ChartFactory.getPieChartView(this, mSeries, mRenderer); 
    mRenderer.setClickEnabled(true); 
    mRenderer.setSelectableBuffer(10); 

    mChartView.setOnClickListener(new View.OnClickListener() { 
    @Override 
    public void onClick(View v) { 
    SeriesSelection seriesSelection = mChartView.getCurrentSeriesAndPoint(); 

    if (seriesSelection == null) { 
    Toast.makeText(AndroidPopupWindowActivity111.this,"No chart element was clicked",Toast.LENGTH_SHORT).show(); 
    } else { 
    Toast.makeText(AndroidPopupWindowActivity111.this,"Chart element data point index "+ (seriesSelection.getPointIndex()+1) + " was clicked" + " point value="+ seriesSelection.getValue(), Toast.LENGTH_SHORT).show(); 
    } 
    } 
    }); 

    mChartView.setOnLongClickListener(new View.OnLongClickListener() { 
    @SuppressLint("ShowToast") 
    @Override 
    public boolean onLongClick(View v) { 
    SeriesSelection seriesSelection = mChartView.getCurrentSeriesAndPoint(); 
    if (seriesSelection == null) { 
    Toast.makeText(AndroidPopupWindowActivity111.this,"No chart element was long pressed", Toast.LENGTH_SHORT); 
    return false; 
    } else { 
    Toast.makeText(AndroidPopupWindowActivity111.this,"Chart element data point index "+ seriesSelection.getPointIndex()+ " was long pressed",Toast.LENGTH_SHORT); 
    return true;   
    } 
    } 
    }); 
    layout.addView(mChartView, new LayoutParams(LayoutParams.MATCH_PARENT, LayoutParams.MATCH_PARENT)); 
    } 
    else { 
    mChartView.repaint(); 
    } 
    } 
} 

popup_main.xml

<?xml version="1.0" encoding="utf-8"?> 
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_width="fill_parent" 
    android:layout_height="fill_parent" 
    android:orientation="vertical" > 

    <TextView 
     android:layout_width="fill_parent" 
     android:layout_height="wrap_content" 
     android:text="hellooo" /> 
    <Button 
     android:id="@+id/openpopup" 
     android:layout_width="fill_parent" 
     android:layout_height="wrap_content" 
     android:text="Open Popup Window" /> 

</LinearLayout> 

main_piechart.xml

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_width="fill_parent" 
    android:layout_height="fill_parent" 
    android:orientation="vertical" 
    android:paddingLeft="10dp" 
    android:paddingRight="10dp" 
    android:paddingTop="30dp"> 

    <LinearLayout 
     android:id="@+id/chart" 
     android:layout_width="300dp" 
     android:layout_height="190dp" 

     android:orientation="horizontal" > 

    </LinearLayout> 

    <Button 
     android:id="@+id/dismiss" 
     android:layout_width="fill_parent" 
     android:layout_height="wrap_content" 
     android:text="Dismiss" /> 

</LinearLayout> 

當我運行這個program..It顯示錯誤:---

Process: in.wptrafficanalyzer.achartenginepiechart, PID: 14513 
java.lang.RuntimeException: Unable to resume activity {in.wptrafficanalyzer.achartenginepiechart/in.wptrafficanalyzer.achartenginepiechart.AndroidPopupWindowActivity111}: java.lang.NullPointerException 
    at android.app.ActivityThread.performResumeActivity(ActivityThread.java:2972) 
    at android.app.ActivityThread.handleResumeActivity(ActivityThread.java:3001) 
    at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2403) 
    at android.app.ActivityThread.access$800(ActivityThread.java:159) 
    at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1329) 
    at android.os.Handler.dispatchMessage(Handler.java:110) 
    at android.os.Looper.loop(Looper.java:193) 
    at android.app.ActivityThread.main(ActivityThread.java:5324) 
    at java.lang.reflect.Method.invokeNative(Native Method) 
    at java.lang.reflect.Method.invoke(Method.java:515) 
    at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:824) 
    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:640) 
    at dalvik.system.NativeStart.main(Native Method) 
Caused by: java.lang.NullPointerException 
    at in.wptrafficanalyzer.achartenginepiechart.AndroidPopupWindowActivity111.onResume(AndroidPopupWindowActivity111.java:130) 
    at android.app.Instrumentation.callActivityOnResume(Instrumentation.java:1197) 

哪裏是錯在程序???我不能understand..thanks提前

+0

的看法是不initialized.It的投擲NullPointerException異常。 –

+0

AndroidPopupWindowActivity111中的行號130是什麼? –

+0

我必須在我的代碼中更改? –

回答

0

這裏:

layout.addView(mChartView, new LayoutParams(LayoutParams.MATCH_PARENT, LayoutParams.MATCH_PARENT));

線造成問題,因爲layout未初始化。您正在初始化按鈕上的layout,但在活動開始時調用onResume

初始化layoutonCreatesetContentView後:

layout = (LinearLayout) findViewById(R.id.chart); 
+0

我刪除這一個..現在我得到按鈕..當我點擊按鈕只有「解僱」按鈕即將..我不能看到的餅圖.. –

+0

你在對話框中添加PieChart? –

+0

是的,我正在試圖做.. –