如何在微调器上显示饼图选择项目? 我创建了一个应用程序来显示Spinner OnItem选定事件的条形图和饼图。条形图在选择的onitem上运行良好。问题是,当我在Spinner上选择饼图时,应用程序崩溃了。救救我。
主要活动
package saro.example.com.chart_view;
import android.app.Activity;
import android.content.Intent;
import android.graphics.Color;
import android.os.Bundle;
import android.view.Menu;
import android.view.View;
import android.widget.AdapterView;
import android.widget.ArrayAdapter;
import android.widget.Spinner;
import android.widget.TextView;
import android.widget.Toast;
import android.support.v7.app.ActionBarActivity;
import com.github.mikephil.charting.charts.BarChart;
import com.github.mikephil.charting.charts.PieChart;
import com.github.mikephil.charting.data.BarData;
import com.github.mikephil.charting.data.BarDataSet;
import com.github.mikephil.charting.data.BarEntry;
import com.github.mikephil.charting.utils.ColorTemplate;
import java.util.ArrayList;
import java.util.List;
public class MainActivity extends Activity implements
AdapterView.OnItemSelectedListener {
String[] chart = {"Select" ,"Bar Chart", "Pie Chart"};
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
//Getting the instance of Spinner and applying OnItemSelectedListener on it
Spinner spin = (Spinner) findViewById(R.id.spinner);
spin.setOnItemSelectedListener(this);
//Creating the ArrayAdapter instance having the country list
ArrayAdapter aa = new ArrayAdapter(this,android.R.layout.simple_spinner_item,chart);
aa.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
//Setting the ArrayAdapter data on the Spinner
spin.setAdapter(aa);
}
//Performing action onItemSelected and onNothing selected
@Override
public void onItemSelected(AdapterView<?> Position, View arg1, int position,long id) {
String selectedItem = Position.getItemAtPosition(position).toString();
switch(selectedItem){
case "Select":
Toast.makeText(getApplicationContext(),"Please Select Bar Chart or Pie chart",Toast.LENGTH_SHORT).show();
break;
case "Bar Chart":
Intent intent = new Intent(MainActivity.this,barchart.class);
startActivity(intent);
break;
case "Pie Chart":
Intent intent1 = new Intent(MainActivity.this,PieChart.class);
startActivity(intent1);
break;
}
// if(selectedItem.equals("Bar Chart"))
// {
// Intent intent = new Intent(MainActivity.this,barchart.class);
// startActivity(intent);
//
// }
// else {
// if(selectedItem.equals("Pie Chart")) {
// Intent ind = new Intent(MainActivity.this,piechart.class);
// startActivity(ind);
// }
}
@Override
public void onNothingSelected(AdapterView<?> arg0) {
// TODO Auto-generated method stub
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu; this adds items to the action bar if it is present.
getMenuInflater().inflate(R.menu.activity_main, menu);
return true;
}
}
barchart.java
package saro.example.com.chart_view;
import android.app.Activity;
import android.graphics.Color;
import android.os.Bundle;
import android.widget.Toast;
import android.support.v7.app.ActionBarActivity;
import com.github.mikephil.charting.charts.BarChart;
import com.github.mikephil.charting.data.BarData;
import com.github.mikephil.charting.data.BarDataSet;
import com.github.mikephil.charting.data.BarEntry;
import com.github.mikephil.charting.utils.ColorTemplate;
import java.util.ArrayList;
import java.util.List;
/**
* Created by saravanakumars on 9/14/2017.
*/
public class barchart extends Activity
{ BarChart chart ;
ArrayList<BarEntry> BARENTRY ;
ArrayList<String> BarEntryLabels ;
BarDataSet Bardataset ;
BarData BARDATA ;
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.bar_chart);
// Toast.makeText(getApplicationContext(),"bar", Toast.LENGTH_LONG).show();
chart = (BarChart) findViewById(R.id.bar);
BARENTRY = new ArrayList<>();
BarEntryLabels = new ArrayList<String>();
AddValuesToBARENTRY();
AddValuesToBarEntryLabels();
Bardataset = new BarDataSet(BARENTRY, "Projects");
BARDATA = new BarData(BarEntryLabels, Bardataset);
Bardataset.setColors(ColorTemplate.COLORFUL_COLORS);
chart.setData(BARDATA);
chart.animateY(3000);
}
public void AddValuesToBARENTRY(){
BARENTRY.add(new BarEntry(2f, 0));
BARENTRY.add(new BarEntry(4f, 1));
BARENTRY.add(new BarEntry(6f, 2));
BARENTRY.add(new BarEntry(8f, 3));
BARENTRY.add(new BarEntry(7f, 4));
BARENTRY.add(new BarEntry(3f, 5));
}
public void AddValuesToBarEntryLabels(){
BarEntryLabels.add("January");
BarEntryLabels.add("February");
BarEntryLabels.add("March");
BarEntryLabels.add("April");
BarEntryLabels.add("May");
BarEntryLabels.add("June");
}
}
piechart.java
package saro.example.com.chart_view;
import android.app.Activity;
import android.content.Context;
import android.graphics.Canvas;
import android.graphics.Paint;
import android.graphics.RectF;
import android.graphics.drawable.Drawable;
import android.os.Bundle;
import android.graphics.Color;
import android.os.Bundle;
import android.support.v4.content.ContextCompat;
import android.support.v7.app.AppCompatActivity;
import android.view.View;
import android.widget.LinearLayout;
import android.widget.Toast;
import com.github.mikephil.charting.animation.Easing;
import com.github.mikephil.charting.charts.PieChart;
import com.github.mikephil.charting.components.Legend;
import com.github.mikephil.charting.data.Entry;
import com.github.mikephil.charting.data.PieData;
import com.github.mikephil.charting.data.PieDataSet;
import com.github.mikephil.charting.formatter.DefaultValueFormatter;
import com.github.mikephil.charting.formatter.PercentFormatter;
import com.github.mikephil.charting.formatter.ValueFormatter;
import com.github.mikephil.charting.highlight.Highlight;
import com.github.mikephil.charting.listener.OnChartValueSelectedListener;
import com.github.mikephil.charting.utils.ViewPortHandler;
import java.text.DecimalFormat;
import java.util.ArrayList;
import java.util.Random;
import static android.R.attr.data;
/**
* Created by saravanakumars on 9/14/2017.
*/
public class piechart extends Activity {
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.pie_chart);
// Toast.makeText(getApplicationContext(), "Pie", Toast.LENGTH_LONG).show();
PieChart mChart = (PieChart)findViewById(R.id.chart_detail);
mChart.setUsePercentValues(true);
mChart.setDescription("");
mChart.setExtraOffsets(15, 15, 22,20);
mChart.setDragDecelerationFrictionCoef(0.95f);
mChart.setDrawSliceText(false);
mChart.setDrawHoleEnabled(true);
mChart.setHoleColor(Color.WHITE);
mChart.setTransparentCircleColor(Color.WHITE);
mChart.setTransparentCircleAlpha(10);
mChart.setDrawCenterText(true);
mChart.setRotationAngle(0);
mChart.setHoleRadius(55f);
mChart.setTransparentCircleRadius(1f);
mChart.setCenterTextRadiusPercent(1f);
mChart.setPressed(false);
// enable rotation of the chart by touch
mChart.setRotationEnabled(false);
mChart.setHighlightPerTapEnabled(true);
mChart.setCenterText(" ");
//*//*data setting*//*
String[] mParties = new String[]{
"Groceries", "Entertainment", "Dining", "Appareal"};
//float mult = 100;
ArrayList<Entry> yVals1 = new ArrayList<Entry>();
// IMPORTANT: In a PieChart, no values (Entry) should have the same
// xIndex (even if from different DataSets), since no values can be
// drawn above each other.
yVals1.add(new Entry((float) 16, 0));
yVals1.add(new Entry((float) 32, 1));
yVals1.add(new Entry((float) 34, 2));
yVals1.add(new Entry((float) 18, 3));
ArrayList<String> xVals = new ArrayList<String>();
for (int i = 0; i < 3 + 1; i++)
xVals.add(mParties[i % mParties.length]);
PieDataSet dataSet = new PieDataSet(yVals1," ");
// dataSet.setSliceSpace(3f);
dataSet.setSelectionShift(3f);
dataSet.setValueTextColor(Color.BLUE);
// add colors
ArrayList<Integer> colors = new ArrayList<Integer>();
colors.add(Color.rgb(0, 222, 197));
colors.add(Color.rgb(40, 168, 239));
colors.add(Color.rgb(163, 97, 255));
colors.add(Color.rgb(113, 93, 178));
dataSet.setColors(colors);
dataSet.setYValuePosition(PieDataSet.ValuePosition.OUTSIDE_SLICE);
dataSet.setValueLinePart1Length(.28f);
dataSet.setValueLinePart2Length(.22f);
dataSet.setValueLineWidth(.0000001f);
PieData data = new PieData(xVals, dataSet);
data.setValueFormatter(new PercentFormatter());
data.setValueTextSize(11f);
data.setValueTextColor(Color.BLACK);
// data.setValueTypeface(tf);
mChart.setData(data);
// undo all highlights
mChart.highlightValues(null);
mChart.invalidate();
mChart.animateY(1400, Easing.EasingOption.EaseInOutQuad);
Legend l = mChart.getLegend();
l.setPosition(Legend.LegendPosition.RIGHT_OF_CHART);
l.setEnabled(true);
l.setTextSize(5f);
final ArrayList<String> month = new ArrayList<>();
month.add("Month"); month.add("January");
month.add("Feb");
month.add("March");
month.add("May");
month.add("June");
month.add("July");
month.add("August");
month.add("September");
month.add("October");
month.add("November");
month.add("December");
}
}
gradle.app
apply plugin: 'com.android.application'
android {
compileSdkVersion 26
buildToolsVersion "26.0.1"
defaultConfig {
applicationId "saro.example.com.chart_view"
minSdkVersion 19
targetSdkVersion 26
versionCode 1
versionName "1.0"
testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"
}
buildTypes {
release {
minifyEnabled false
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
}
}
}
repositories {
maven { url "https://jitpack.io" }
}
dependencies {
compile fileTree(dir: 'libs', include: ['*.jar'])
androidTestCompile('com.android.support.test.espresso:espresso-core:2.2.2', {
exclude group: 'com.android.support', module: 'support-annotations'
})
compile 'com.android.support:appcompat-v7:26.+'
compile 'com.android.support.constraint:constraint-layout:1.0.2'
compile 'com.github.PhilJay:MPAndroidChart:v2.0.9'
compile 'com.github.PhilJay:MPAndroidChart:v2.2.4'
compile 'com.github.PhilJay:MPAndroidChart:v2.2.2'
compile 'com.github.PhilJay:MPAndroidChart:v2.1.6'
compile 'com.github.PhilJay:MPAndroidChart:v2.2.5'
testCompile 'junit:junit:4.12'
}
先谢谢。 错误LOg
09-15 11:21:04.646 10243-10243 / saro.example.com.chart_view E / AndroidRuntime:FATAL EXCEPTION:main 处理:saro.example.com.chart_view,PID:10243 android.content.ActivityNotFoundException:无法找到显式活动类{saro.example.com.chart_view / com.github.mikephil.charting.charts.PieChart};你有没有在AndroidManifest.xml中声明这个活动? 在android.app.Instrumentation.checkStartActivityResult(Instrumentation.java:1805) 在android.app.Instrumentation.execStartActivity(Instrumentation.java:1523) 在android.app.Activity.startActivityForResult(Activity.java:4225) 在android.app.Activity.startActivityForResult(Activity.java:4183) 在android.app.Activity.startActivity(Activity.java:4522) 在android.app.Activity.startActivity(Activity.java:4490) at saro.example.com.chart_view.MainActivity.onItemSelected(MainActivity.java:65) 在android.widget.AdapterView.fireOnSelected(AdapterView.java:931) 在android.widget.AdapterView.dispatchOnItemSelected(AdapterView.java:920) 在android.widget.AdapterView.-wrap1(AdapterView.java) 在android.widget.AdapterView $ SelectionNotifier.run(AdapterView.java:890) 在android.os.Handler.handleCallback(Handler.java:751) 在android.os.Handler.dispatchMessage(Handler.java:95) 在android.os.Looper.loop(Looper.java:154) 在android.app.ActivityThread.main(ActivityThread.java:6119) at java.lang.reflect.Method.invoke(Native Method) 在com.android.internal.os.ZygoteInit $ MethodAndArgsCaller.run(ZygoteInit.java:886) 在com.android.internal.os.ZygoteInit.main(ZygoteInit.java:776)
答案 0 :(得分:0)
根据您的logcat,您错过了在Manifest
中声明活动。实际上,我认为,这是一个来自github repo的活动,你编译成项目。检查该库的文档,也许您必须从中声明一些活动