Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/376.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java MPAndroid图表-图表未更新_Java_Android_Android Fragments_Android Studio_Mpandroidchart - Fatal编程技术网

Java MPAndroid图表-图表未更新

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

我使用水平MPAndroid图表来显示收入/支出,该图表最有效。我可以更改显示的信息,但我只能在创建的视图中进行更改。如果我尝试从显示片段的活动中执行此操作,则不会发生任何事情,我完全不知道为什么。尽管我不能100%确定我是否以正确的方式设置了数据

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));