我正在尝试根据已发生的点击次数显示对话框。我有两个小问题,我将在下面解释:
所以我清除我的应用程序上的数据,以便点击次数从0开始。基本上我要做的是当我访问下面的类时,如果点击次数= 4,8或12,那么在if else语句中输出与它们关联的相关消息。如果它不等于任何这些数字,则每4次点击(16,20,24,28等)显示默认消息“您将获得视频奖励。”
所以从零点击的新鲜开始,当我导航到这个页面时,我注意到每次点击(1,2,3,4等)它会显示默认对话框消息,这不是我需要的。我希望它显示4,8,12的消息,这些消息有自己的特定消息,然后在(16,20,24,28等)之后显示一般消息。
我还注意到,如果我通过选择后退按钮然后再次访问页面来退出页面,每次出现对话框时,我都会在ok按钮上点击许多按钮以关闭对话框。最初在我从页面返回之前,我只用了一次关闭对话框,但是当我重新进入页面时,需要多次点击,我不知道为什么。
如何解决这两个问题?
以下代码:
import java.util.Random;
public class Content extends AppCompatActivity {
Button backButton;
Button selectAnotherButton;
TextView clickCountText;
int getClickCountInt;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_content);
final SharedPreferencesManager prefManager = SharedPreferencesManager.getInstance(Content.this);
clickCountText = findViewById(R.id.click_count);
clickCountText.setText(Integer.toString(prefManager.getClicks()));
getClickCountInt = Integer.parseInt(clickCountText.getText().toString());
backButton = findViewById(R.id.button_back);
selectAnotherButton = findViewById(R.id.button_select_another);
setContent();
selectAnotherButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
clickCountText.setText(Integer.toString(prefManager.increaseClickCount()));
if (getClickCountInt == 4){
ShowRewardDialog("You are rewarded with a the yellow smiley face in the homepage");
} else if (getClickCountInt == 8) {
ShowRewardDialog("You are rewarded with a the green smiley face in the homepage");
} else if (getClickCountInt == 12) {
ShowRewardDialog("You are rewarded with a the red smiley face in the homepage");
} else {
for(int i = 0; i <= getClickCountInt; i+=4) {
ShowRewardDialog("You are rewarded with a video\"");
}
}
setContent();
}
});
backButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
finish();
}
});
}
private void ShowRewardDialog(String message) {
final Dialog dialog = new Dialog(Content.this);
dialog.setContentView(R.layout.custom_dialog);
SpannableString title = new SpannableString("YOU GAINED A REWARD");
title.setSpan(new ForegroundColorSpan(Content.this.getResources().getColor(R.color.purple))
, 0, title.length(), Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);
// set the custom dialog components - text, image and button
TextView text = dialog.findViewById(R.id.dialog_text);
dialog.setTitle(title);
text.setText(message);
Button dialogButton = dialog.findViewById(R.id.dialog_button_OK);
// if button is clicked, close the custom dialog
dialogButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
dialog.dismiss();
}
});
dialog.show();
}
}
更新
好的,为了让我更容易,我会说出当前的问题以及我希望它如何运作。
我已经在Content类中禁用了else语句,它在对话框中显示了一般信息。
好的,我已经为我的共享首选项创建了一个类,我可以从MainActivity类(这是我的主页)和Content类(这是第二页)中获取它的实例。
让我们说点击次数从0开始(我将其显示为文本)并且我在主页上。当我从主页选择笑话按钮时,我将导航到第二页,计数从1开始。如果我选择在第二页显示的“选择另一个”按钮,则计数变为2(我可以看到)通过显示的文本),再次单击然后再单击三次,再次单击它将转到4,并显示计数4的对话框。这适用于我去8和12的时候。
当我选择“后退”按钮从第二页到第一页时,我可以看到计数与第二页中显示的计数保持一致。例如,如果在第2页上将count设置为8并且我单击后退,则当我查看文本时,主页也会显示8的计数。
这似乎一切都很好。然而让我们从0再次开始。如果我点击笑话按钮然后我在1,我选择'选择另一个'按钮两次,所以计数在3,然后单击后退按钮。当我查看主页时,Count目前是3。如果我再次单击笑话按钮,则计数为4,这是正确的,但if count等于4的对话框不会出现。但是,如果我再单击“选择另一个”按钮3,那么它将显示4的对话框。因此,如果连续四次单击“选择另一个”按钮,对话框将仅显示为4,而不是我想要的是如果总点击次数等于4则显示对话框。
我需要做些什么来解决这个问题?
以下是代码:
SharedPreferencesManager类:
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;
}
public int getClicks(){
return sharedPrefs.getInt(NUMBER_OF_CLICKS, 0);
}
}
MainActivity类(第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);;
jokesButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
prefManager.increaseClickCount();
openContentPage("jokes");
}
});
TextView clickCountText = findViewById(R.id.click_count);
clickCountText.setText(Integer.toString(prefManager.increaseClickCount()));
}
private void openContentPage(String v) {
Intent intentContentPage = new Intent(MainActivity.this, Content.class);
intentContentPage.putExtra("keyPage", v);
startActivity(intentContentPage);
}
}
内容类(第2页):
public class Content extends AppCompatActivity {
Button backButton;
Button selectAnotherButton;
TextView clickCountText;
int getClickCountInt;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_content);
final SharedPreferencesManager prefManager = SharedPreferencesManager.getInstance(Content.this);
clickCountText = findViewById(R.id.click_count);
clickCountText.setText(Integer.toString(prefManager.getClicks()));
getClickCountInt = Integer.parseInt(clickCountText.getText().toString());
backButton = findViewById(R.id.button_back);
selectAnotherButton = findViewById(R.id.button_select_another);
setContent();
selectAnotherButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
getClickCountInt++;
clickCountText.setText(Integer.toString(prefManager.increaseClickCount()));
if (getClickCountInt == 4){
ShowRewardDialog("You are rewarded with a the yellow smiley face in the homepage");
} else if (getClickCountInt == 8) {
ShowRewardDialog("You are rewarded with a the green smiley face in the homepage");
} else if (getClickCountInt == 12) {
ShowRewardDialog("You are rewarded with a the red smiley face in the homepage");
} //else {
//for(int i = 0; i <= getClickCountInt; i+=4) {
//ShowRewardDialog("You are rewarded with a video\"");
//}
//}
}
});
backButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
finish();
}
});
}
private void ShowRewardDialog(String message) {
final Dialog dialog = new Dialog(Content.this);
dialog.setContentView(R.layout.custom_dialog);
SpannableString title = new SpannableString("YOU GAINED A REWARD");
title.setSpan(new ForegroundColorSpan(Content.this.getResources().getColor(R.color.purple))
, 0, title.length(), Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);
// set the custom dialog components - text, image and button
TextView text = dialog.findViewById(R.id.dialog_text);
dialog.setTitle(title);
text.setText(message);
Button dialogButton = dialog.findViewById(R.id.dialog_button_OK);
// if button is clicked, close the custom dialog
dialogButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
dialog.dismiss();
}
});
dialog.show();
}
}
答案 0 :(得分:0)
您的算法的第一个问题是您没有将当前点击添加到您的点击次数中。 在selectAnotherButton.setOnClickListener的onClick中你应该添加一个getClickCountInt ++(并且不要忘记用这个新值更新clickCountText)。
此外,在onCreate上,您应该从SharedPreferences获取getClickCountInt的值,然后使用它来设置clickCountText上的值,而不是相反。
This answear展示了如何在SharedPreferences中读取/存储数据。