如何统计用户点击按钮的次数以及如何保存。 Android 工作室

How to count how many times a user has clicked a button and how to save it. Android Studio

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

条形图代码:

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. 如何在片段中保存整数计数器并在不重置的情况下将其显示在条形图上?

非常感谢!

将您的 SharedPreferences 从 onPause 移动到 onCreate(如果它是 Activity)或移动到 onActivityCreated(如果它是 片段)。我建议编写一个函数并在您的 onClickListener 中调用它,然后每次用户单击该按钮时,它都会存储在您的 SharedPreferences 中。

您每次都使用会话变量 elatedTimes 覆盖 SharedPreferences 中的 elated 值,而不是在设置它之前先获取值并将它们的总和设置为

@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();
}