有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java如何计算用户点击按钮的次数以及如何保存按钮。安卓工作室

我目前正在使用Android Studio制作一个Android应用程序,它的一个功能是收集用户点击某个按钮的次数,并将其存储,然后将其显示在条形图上。这是一个情绪跟踪器。然而,计数器位于一个片段上,每当我离开应用程序或活动时,它只会重置我不想要的值

条形图的代码:

SharedPreferences preferences = requireActivity().getSharedPreferences("MY_PREFERENCES", Context.MODE_PRIVATE);


        BarGraphSeries series1 = new BarGraphSeries<>(new DataPoint[] {
                new DataPoint(1, preferences.getInt("Elated", elatedTimes)),
                new DataPoint(2, preferences.getInt("Happy", happyTimes)),
                new DataPoint(3, preferences.getInt("Meh", mehTimes)),
                new DataPoint(4, preferences.getInt("Sad", sadTimes)),
                new DataPoint(5, preferences.getInt("Angry", angryTimes))
        });
        graphView.addSeries(series1);

// styling
        StaticLabelsFormatter staticLabelsFormatter = new StaticLabelsFormatter(graphView);
        staticLabelsFormatter.setHorizontalLabels(new String[] {"Elated", "Happy", "Meh", "Sad", "Angry"});
        graphView.getGridLabelRenderer().setLabelFormatter(staticLabelsFormatter);
        
        series1.setValueDependentColor(new ValueDependentColor<DataPoint>() {
            @Override
            public int get(DataPoint data) {
                return Color.rgb((int) data.getX()*255/4, (int) Math.abs(data.getY()*255/6), 100);
            }
        });

        series1.setSpacing(50);
        series1.setAnimated(true);
        graphView.getGridLabelRenderer().setLabelsSpace(8);
        graphView.getViewport().setMinY(0);
        graphView.getViewport().setYAxisBoundsManual(true);

// draw values on top
        series1.setDrawValuesOnTop(true);
        series1.setValuesOnTopColor(Color.RED);

要保存的情绪之一的代码:

elatedCard.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                SharedPreferences preferences = requireActivity().getSharedPreferences("MY_PREFERENCES", Context.MODE_PRIVATE);
                SharedPreferences.Editor editor = preferences.edit();
                editor.putInt("Happy", elatedTimes++);
                editor.apply();

                final Dialog elatedDialog = new Dialog(HomeFragment.this.getContext());
                elatedDialog.setContentView(R.layout.elated_dialog_design);
                elatedDialog.show();

                elatedDialogButton = (Button) elatedDialog.findViewById(R.id.elated_dialog_button);
                //Performing action on Button Click
                elatedDialogButton.setOnClickListener(new View.OnClickListener() {
                    @Override
                    public void onClick(View arg0) {
                        final Intent intent;
                        intent = new Intent(getContext(), ventingPage.class);
                        startActivity(intent);
                    }

                });
            }
        });

(它位于onViewCreated()中)

最后是onPause()的代码,它不起作用:

@Override
    public void onPause(){
        SharedPreferences.Editor editor = requireActivity().getSharedPreferences("MY_PREFERENCES", Context.MODE_PRIVATE).edit();
        editor.putInt("Elated", elatedTimes);
        editor.apply();
        super.onPause();

    }

所以基本上我的问题是

  1. 如何在不重置整型计数器的情况下,将整型计数器保存在片段中并显示在条形图上

非常感谢


共 (1) 个答案

  1. # 1 楼答案

    每次都使用会话变量elatedTimes覆盖elated中的SharedPreferences值,而在设置之前,先获取值,然后设置它们的总和,如下所示:

    @Override
    public void onPause(){
       SharedPreferences prefs = requireActivity().getSharedPreferences("MY_PREFERENCES", Context.MODE_PRIVATE);
       int elatedCurrentValue = prefs.getInt("Elated",0); // get existing value
       int elatedNewValue = elatedCurrentValue + elatedTimes; //add it to session value
       SharedPreferences.Editor editor = prefs.edit();
       editor.putInt("Elated", elatedNewValue); // save updated value
       editor.apply();
    }