根据点击次数无法看到图片视图

时间:2018-06-14 20:55:29

标签: java

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

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

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

3 个答案:

答案 0 :(得分:1)

您需要为点击添加一个getter




  public int getClicks(){
返回sharedPrefs.getInt(NUMBER_OF_CLICKS,0);
}
  




当您想要获得点击时,您正在调用increaseClickCount ()导致您的点击在返回之前递增。这就是为什么每次打开舞台时都会获得点击次数以及开关无法正常工作的原因





所以将上面的getter添加到SharedPrefrenceManager并更改这两行< / p>&#xA;&#xA;

  switch(prefManager.increaseClickCount()){&#xA;  
&#xA;&#xA;

to

&#xA;&#xA;
  switch(prefManager.getClicks()){&#xA;  
&#xA;&#xA;
&#XA;&#XA;
 <代码> clickCountText.setText(Integer.toString(prefManager.increaseClickCount()));&#XA;  
&#XA;&#XA;

&#xA;&#xA;
  clickCountText.setText(Integer.toString(prefManager.getClicks()));&#xA;  
&#xA;&#xA;
&#xA;&#xA;

告诉我这是否可以解决您的问题

&#xA;

答案 1 :(得分:0)

计数的原因&#39;增加是您使用increaseClickCount()来接收点击次数。您必须创建另一种方法来接收当前的clickCount。您的switch语句只有在等于4,8或12时才有效。也许您应该使用if

答案 2 :(得分:0)

  

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

在我看来,就像这行代码一样,在MainActivity.onCreate()方法中,会将一个计数为1的文本字符串传递给clickCountText。

clickCountText.setText(Integer.toString(prefManager.increaseClickCount()));

此外,每次调用SharedPreferencesManager.increaseClickCount时,您都要为clickCount分配一个值,并且其中的任何内容都会被覆盖。

int clickCount = sharedPrefs.getInt(NUMBER_OF_CLICKS, 0);

那是什么价值? System.out.println是你的朋友。 我使用这种模式

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

我总是包含类和方法,因为如果为了调试目的留下几个并且想要在以后删除它们,试图弄清楚println来自哪里可能很烦人。