Java 基于单击次数的图像视图不可见

Java 基于单击次数的图像视图不可见,java,Java,在我的MainActivity课程中,我想根据按钮上出现的点击次数显示笑脸的图像视图,包括笑话、诗歌和趣事。但是,我的switch语句似乎不起作用,因为没有图像出现。此外,如果这些图像视图中的任何一个变得可见,那么即使用户关闭并重新打开应用程序,它们也应该保持可见 我还注意到,当用户打开不正确的应用程序时,点击次数会增加一次。它应该根据前面提到的被点击的按钮而增加 public class MainActivity extends AppCompatActivity { SharedP

在我的MainActivity课程中,我想根据按钮上出现的点击次数显示笑脸的图像视图,包括笑话、诗歌和趣事。但是,我的switch语句似乎不起作用,因为没有图像出现。此外,如果这些图像视图中的任何一个变得可见,那么即使用户关闭并重新打开应用程序,它们也应该保持可见

我还注意到,当用户打开不正确的应用程序时,点击次数会增加一次。它应该根据前面提到的被点击的按钮而增加

public class MainActivity extends AppCompatActivity {

    SharedPreferencesManager prefManager = SharedPreferencesManager.getInstance(this);

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        Button jokesButton = findViewById(R.id.button_jokes);
        Button poemsButton = findViewById(R.id.button_poems);
        Button funnyStoriesButton = findViewById(R.id.button_funny_stories);


        ImageView yellowSmileyFace = findViewById(R.id.yellow_happy);
        ImageView greenSmileyFace = findViewById(R.id.green_happy);
        ImageView redSmileyFace = findViewById(R.id.red_happy);


        jokesButton.setOnClickListener(new View.OnClickListener() {

            @Override
            public void onClick(View v) {
                prefManager.increaseClickCount();
                openContentPage("jokes");
            }
        });

        poemsButton.setOnClickListener(new View.OnClickListener() {

            @Override
            public void onClick(View v) {
                prefManager.increaseClickCount();
                openContentPage("poems");
            }
        });

        funnyStoriesButton.setOnClickListener(new View.OnClickListener() {

            @Override
            public void onClick(View v) {
                prefManager.increaseClickCount();
                openContentPage("funnystories");
            }
        });

        TextView clickCountText = findViewById(R.id.click_count);
        clickCountText.setText(Integer.toString(prefManager.increaseClickCount()));


        switch (prefManager.increaseClickCount()){

            case 4 :
                yellowSmileyFace.setVisibility(View.VISIBLE);
                break;
            case 8 :
                greenSmileyFace.setVisibility(View.VISIBLE);
                break;
            case 12 :
                redSmileyFace.setVisibility(View.VISIBLE);
                break;
            default :
                yellowSmileyFace.setVisibility(View.INVISIBLE);
                greenSmileyFace.setVisibility(View.INVISIBLE);
                redsmileyFace.setVisibility(View.INVISIBLE);

        }



    }

    private void openContentPage(String v) {
        Intent intentContentPage = new Intent(MainActivity.this, Content.class);
        intentContentPage.putExtra("keyPage", v);
        startActivity(intentContentPage);

    }


}
下面是共享首选项类

public class SharedPreferencesManager {

    private static final String APP_PREFS = "AppPrefsFile";
    private static final String NUMBER_OF_CLICKS = "numberOfClicks";

    private SharedPreferences sharedPrefs;
    private static SharedPreferencesManager instance;



    private SharedPreferencesManager(Context context) {
        sharedPrefs = context.getApplicationContext().getSharedPreferences(APP_PREFS, MODE_PRIVATE);
    }


    public static synchronized SharedPreferencesManager getInstance(Context context){
        if(instance == null)
            instance = new SharedPreferencesManager(context);

        return instance;
    }

    public int increaseClickCount() {
        int clickCount = sharedPrefs.getInt(NUMBER_OF_CLICKS, 0);
        clickCount++;
        SharedPreferences.Editor editor = sharedPrefs.edit();
        editor.putInt(NUMBER_OF_CLICKS, clickCount);
        editor.apply();
        return clickCount;
    }
}

计数增加的原因是您使用increaseClickCount接收单击计数。您必须创建另一个方法来接收当前的单击计数。只有当它们等于4、8或12时,switch语句才有效。也许你应该用if来代替

您需要为您的点击添加一个getter

public int getClicks(){
    return sharedPrefs.getInt(NUMBER_OF_CLICKS, 0);
}
无论何时,只要您想获得当前的点击,您都会调用increaseClickCount,这会导致您的点击在返回之前增加。这就是为什么每次打开舞台时它都会发出咔嗒声,也就是为什么你的开关不能正常工作

因此,将上述getter添加到您的SharedReferenceManager并更改这两行

 switch (prefManager.increaseClickCount()){

告诉我这是否解决了你的问题

我还注意到,当用户打开不正确的应用程序时,点击次数会增加一次

在我看来,MainActivity.onCreate方法中的这行代码将向clickCountText传递count 1的文本字符串

clickCountText.setText(Integer.toString(prefManager.increaseClickCount()));
此外,每次调用SharedReferencesManager.increaseClickCount时,都会为clickCount指定一个值,其中的任何内容都会被覆盖

int clickCount = sharedPrefs.getInt(NUMBER_OF_CLICKS, 0);
这个值是多少? System.out.println是你的朋友。 我使用这种模式

System.out.println("MyClass, MyMethod, MyVariable:" + myVariable);

我总是包含这个类和方法,因为如果为了调试而保留了几个println,并且希望以后去掉它们,那么试图找出println的来源可能会很烦人。

太好了,谢谢。如果你不介意回答的话,我确实有一个小问题。点击次数,只有在我关闭应用程序并重新登录后才会更新。例如,如果我点击了5次,并且我再按了5次某些按钮,它仍然会显示5次点击。然而,如果我关闭应用程序并重新打开,它会显示10次点击次数。有没有办法使单击计数实时增加?很抱歉响应太慢,只需添加clickCountText.setTextInteger.toStringprefManager.getClicks;在你的点击列表下,不是homerk,而是我自己正在构建的应用程序。
clickCountText.setText(Integer.toString(prefManager.increaseClickCount()));
int clickCount = sharedPrefs.getInt(NUMBER_OF_CLICKS, 0);
System.out.println("MyClass, MyMethod, MyVariable:" + myVariable);