Java MPAndroid图表-图表未更新
我使用水平MPAndroid图表来显示收入/支出,该图表最有效。我可以更改显示的信息,但我只能在创建的视图中进行更改。如果我尝试从显示片段的活动中执行此操作,则不会发生任何事情,我完全不知道为什么。尽管我不能100%确定我是否以正确的方式设置了数据Java MPAndroid图表-图表未更新,java,android,android-fragments,android-studio,mpandroidchart,Java,Android,Android Fragments,Android Studio,Mpandroidchart,我使用水平MPAndroid图表来显示收入/支出,该图表最有效。我可以更改显示的信息,但我只能在创建的视图中进行更改。如果我尝试从显示片段的活动中执行此操作,则不会发生任何事情,我完全不知道为什么。尽管我不能100%确定我是否以正确的方式设置了数据 public class BudgetFragment extends Fragment{ private HorizontalBarChart mainChart; private BarData data; private BarDataSet
public class BudgetFragment extends Fragment{
private HorizontalBarChart mainChart;
private BarData data;
private BarDataSet dataset1;
private BarDataSet dataset2;
private int expenseSum = 0;
private int incomeSum = 0;
public MainActivityBudgetFragment(){
}
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
return inflater.inflate(R.layout.budget_fragment, container, false);
}
@Override
public void onViewCreated(View view, Bundle savedInstanceState) {
super.onViewCreated(view, savedInstanceState);
mainChart = (HorizontalBarChart) view.findViewById(R.id.mainBudgetChart);
ArrayList<BarEntry> entries1 = new ArrayList<>();
ArrayList<BarEntry> entries2 = new ArrayList<>();
entries1.add(new BarEntry(10000, 5));
entries2.add(new BarEntry(10000, 5));
dataset1 = new BarDataSet(entries1, "income");
dataset2 = new BarDataSet(entries2, "expense");
//X-axis labels
ArrayList<String> xVals = new ArrayList<String>();
xVals.add("income"); xVals.add("expense");
ArrayList<BarDataSet> dataSets = new ArrayList<BarDataSet>();
dataSets.add(dataset1);
dataSets.add(dataset2);
//Add to chart
data = new BarData(xVals, dataSets);
mainChart.setData(data);
//Description and animation
mainChart.setDescription(""); // set the description
mainChart.setScaleYEnabled(false);
mainChart.setTouchEnabled(false);
mainChart.animateY(2000);
setDataExpense(200);//(This works fine)
setDataIncome(200); //(This works fine)
}
public void updateDataExpense(){
Log.e("updateTag", "Updated expense");
dataset2.removeEntry(1);
data.addEntry(new BarEntry(expenseSum, 1), 1);
dataset2.setColor(getResources().getColor(R.color.orange));
mainChart.notifyDataSetChanged(); // let the chart know it's data changed
mainChart.invalidate(); // refresh
}
public void updateDataIncome(){
Log.e("updateTag", "Updated Income");
dataset1.removeEntry(0);
data.addEntry(new BarEntry(newIncome, 0), 0);
dataset1.setColor(getResources().getColor(R.color.green));
mainChart.notifyDataSetChanged(); // let the chart know it's data changed
mainChart.invalidate(); // refresh
}
//(These do not work when called outside OnViewCreated)
private void setDataExpense(int sum){
expenseSum = (expenseSum + sum);
Log.d("ResumeTag", "expense set at " + expenseSum);
updateDataExpense();
}
private void setDataIncome(int sum){
incomeSum = (incomeSum + sum);
Log.d("ResumeTag", "income set at " + incomeSum);
updateDataIncome();
}
公共类BudgetFragment扩展片段{
私人水平条形图主图表;
私人数据;
私有数据集数据集1;
私有数据集数据集2;
私人内部支出总额=0;
私有int incomeSum=0;
公共维护活动预算片段(){
}
CreateView上的公共视图(布局、充气机、视图组容器、捆绑包保存状态){
返回充气机。充气(R.layout.budget\u碎片,容器,假);
}
@凌驾
已创建视图上的公共void(视图,捆绑保存状态){
super.onViewCreated(视图,savedInstanceState);
mainChart=(水平条形图)view.findViewById(R.id.mainBudgetChart);
ArrayList entries1=新的ArrayList();
ArrayList entries2=新的ArrayList();
条目1.添加(新巴伦特里(10000,5));
条目2.添加(新巴伦特里(10000,5));
数据集1=新的数据集(entries1,“收入”);
数据集2=新的数据集(entries2,“费用”);
//X轴标签
ArrayList xVals=新的ArrayList();
xVals.add(“收入”);xVals.add(“费用”);
ArrayList数据集=新的ArrayList();
dataSets.add(dataset1);
数据集。添加(数据集2);
//添加到图表中
数据=新的BarData(xVAL,数据集);
mainChart.setData(数据);
//描述与动画
mainChart.setDescription(“”;//设置描述
主图表。设置可缩放(假);
mainChart.setTouchEnabled(假);
mainChart.animateY(2000年);
setDataExpense(200);/(这工作正常)
setDataIncome(200);/(这工作正常)
}
public void updateDataExpense(){
Log.e(“更新表”、“更新费用”);
数据集2.远程中心(1);
数据。附录(新巴伦特里(费用总额,1),1);
setColor(getResources().getColor(R.color.orange));
mainChart.notifyDataSetChanged();//让图表知道其数据已更改
mainChart.invalidate();//刷新
}
public void updatedaincome(){
Log.e(“更新表”、“更新收入”);
数据集1.removeEntry(0);
数据。附录(新巴伦特里(新收入,0),0);
setColor(getResources().getColor(R.color.green));
mainChart.notifyDataSetChanged();//让图表知道其数据已更改
mainChart.invalidate();//刷新
}
//(在OnViewCreated外部调用时,这些选项不起作用)
私有void setDataExpense(整数和){
费用总额=(费用总额+总额);
日志d(“简历标签”,“费用设置为”+支出总额);
updateDataExpense();
}
私人收入(整数和){
因科姆=(因科姆+总和);
日志d(“简历标签”,“收入设置为”+收入基数);
UpdateDaincome();
}
}
如果我忘了什么重要的事,请告诉我。我没有太多关于Stackoverflow问题的经验
谢谢你的帮助!
//克里斯请试试这个:
public void updateDataIncome() {
Log.e("updateTag", "Updated Income");
dataset1.removeEntry(0);
data.addEntry(new BarEntry(newIncome, 0), 0);
dataset1.setColor(getResources().getColor(R.color.green));
data.notifyDataChanged(); // NOTIFIES THE DATA OBJECT
mainChart.notifyDataSetChanged(); // let the chart know it's data changed
mainChart.invalidate(); // refresh
}
您的问题确实说明了执行了哪些操作,您希望更新哪些操作的数据。在任何希望刷新数据的操作中,都应该有一个侦听器,然后调用填充要刷新的数据的函数 例如,在这段在微调器中选择值的代码中,会调用onItemSelected(..)&在其中我们调用刷新数据的填充函数。这是部分代码,但您可以找到使用适配器的完整示例&OnItemSelectedListener。希望这对你有帮助
ArrayAdapter<String> adapter = new ArrayAdapter<String>(this, android.R.layout.simple_dropdown_item_1line, monthList);
// Setting the array adapter containing country list to the spinner widget
spinnerMonth.setAdapter(adapter);
AdapterView.OnItemSelectedListener monthSelectedListener = new AdapterView.OnItemSelectedListener()
{
@Override
public void onItemSelected(AdapterView<?> spinner, View container,
int position, long id) {
Log.d("Logger:MainAct"," onItemSelected:Entry::::");
tvMonth.setText("Chart for "+strMonth[position]);
populateChartByMonth(strMonth[position]);
//Toast.makeText(getApplicationContext(), "Success : " + strMonth[position], Toast.LENGTH_SHORT).show();
Log.d("Logger:MainAct"," onItemSelected:Exit::::");
}
@Override
public void onNothingSelected(AdapterView<?> arg0) {
// TODO Auto-generated method stub
Log.d("Logger:MainAct"," onNothingSelected:Entry/Exit");
}
};
ArrayAdapter adapter=新的ArrayAdapter(这是android.R.layout.simple\u下拉列表\u item\u 1line,monthList);
//将包含国家/地区列表的阵列适配器设置为微调器小部件
喷丝头月套接合器(接合器);
AdapterView.OnItemSelectedListener monthSelectedListener=新建AdapterView.OnItemSelectedListener()
{
@凌驾
已选择公共容器(AdapterView微调器、视图容器、,
内部位置,长id){
d(“Logger:MainAct”,“onitmselected:Entry:”;
tvmount.setText(“用于“+strMonth[位置]的图表”);
populateChartByMonth(strMonth[职位]);
//Toast.makeText(getApplicationContext(),“Success:+strMonth[position],Toast.LENGTH\u SHORT).show();
d(“Logger:MainAct”,“onItemSelected:Exit:”;
}
@凌驾
未选择公共无效(AdapterView arg0){
//TODO自动生成的方法存根
Log.d(“记录器:MainAct”,“无选择:进入/退出”);
}
};
该行x值为1,Y值为10000
entries1.add(new BarEntry(5,10000));
entries1.add(new BarEntry(5,10000));