采取多次尝试关闭对话框

时间:2018-06-15 12:17:04

标签: java android

我正在尝试根据已发生的点击次数显示对话框。我有两个小问题,我将在下面解释:

所以我清除我的应用程序上的数据,以便点击次数从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();
  }
}

1 个答案:

答案 0 :(得分:0)

您的算法的第一个问题是您没有将当前点击添加到您的点击次数中。 在selectAnotherButton.setOnClickListener的onClick中你应该添加一个getClickCountInt ++(并且不要忘记用这个新值更新clickCountText)。

此外,在onCreate上,您应该从SharedPreferences获取getClickCountInt的值,然后使用它来设置clickCountText上的值,而不是相反。

This answear展示了如何在SharedPreferences中读取/存储数据。