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