Android开发:离开活动并返回

时间:2016-01-21 17:35:39

标签: android android-activity checkbox textview sharedpreferences

我有一些很好的Java背景,但我对Android很新,并且已经坚持了几个小时。我已经浏览了我能找到的处理类似问题的所有其他StackOverflow文章,但似乎没有什么对我有用。我确定我已经编写了这个笨拙的程序,我的错误就像愚蠢一样,所以请撕开我的代码:)

无论如何,在我的活动上按“返回”后,我遇到了保存复选框的问题。该活动有一个各种电子邮件地址的复选框列表,您可以通过ArrayAdapter和simple_list_item_multiple_choice布局进行设置。我可以点击复选框没问题;他们很容易添加或删除复选标记。我也可以将它保存到首选项而没有任何问题(至少我认为它确实如此)。

然而,当我按下“返回”(据我所知它会破坏活动),然后重新点击调用startActivity(intent)列表活动的按钮(根据我的理解,它再次调用onCreate),我之前选择的复选框只是拒绝保存并且都未选中。我尝试了比我可以计算的更多变化,尝试使用bundleInstance和onDestroy / onCreate等,但无济于事。我的理论是问题可能是我的for循环中的代码没有设置我想要设置的复选框。是这种情况,如果是这样,我该如何解决?

(作为旁注,我知道for循环看起来很尴尬,但我这样做是因为我希望它能够响应动态列表。有时列表会有localNewsEmail和internationalNewsEmail,有时候它们都没有,有时它会有额外的。所以我需要复选框来响应动态列表,当我不确切知道哪些复选框将存在而哪些不存在。但是为了测试目的,我已经硬编码了哪些项目到添加到allEmails,如果检测到任何其他内容,则记录错误。)

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_display_secondary_emails);
    Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);
    setSupportActionBar(toolbar);

    FloatingActionButton fab = (FloatingActionButton) findViewById(R.id.fab);
    fab.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {
            Snackbar.make(view, "Replace with your own action", Snackbar.LENGTH_LONG)
                    .setAction("Action", null).show();
        }
    });
    getSupportActionBar().setDisplayHomeAsUpEnabled(true);

    Intent intent = getIntent();
    localNewsEmail = intent.getStringExtra("emailLocal");
    internationalNewsEmail = intent.getStringExtra("emailInt");
listViewEmails = (ListView) findViewById(R.id.listViewEmails);
            allEmails.add(localNewsEmail);
            allEmails.add(internationalNewsEmail);

            SharedPreferences myPrefs = this.getSharedPreferences("myPrefs", MODE_PRIVATE);
            final SharedPreferences.Editor prefsEditor = myPrefs.edit();

            adapter2 = new ArrayAdapter(this, android.R.layout.simple_list_item_multiple_choice, allEmails);
            listViewEmails.setAdapter(adapter2);
            for (int i = 0; i < listViewEmails.getChildCount(); i++) {
                if ((listViewEmails.getItemAtPosition(i)).equals(localNewsEmail)) {
                    ((CheckedTextView) listViewEmails.getChildAt(i)).setChecked(myPrefs.getBoolean(localNewsEmail, false));
                } else if ((listViewEmails.getItemAtPosition(i)).equals(internationalNewsEmail)) {
                    ((CheckedTextView) listViewEmails.getChildAt(i)).setChecked(myPrefs.getBoolean(internationalNewsEmail, false));
                } else {
                    Log.e("SecondaryActivity", "ERROR");
                    ((CheckedTextView) listViewEmails.getChildAt(i)).setChecked(false);
                }
            }

            listViewEmails.setOnItemClickListener(new AdapterView.OnItemClickListener() {
                @Override
                public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
                    // change the checkbox state
                    CheckedTextView checkedTextView = ((CheckedTextView) view);
                    checkedTextView.setChecked(!checkedTextView.isChecked());
                    if (checkedTextView.getText().equals(localNewsEmail)) {
                        isLocalChecked = checkedTextView.isChecked();
                        prefsEditor.putBoolean(localNewsEmail, isLocalChecked);
                        prefsEditor.commit();
                    } else if (checkedTextView.getText().equals(internationalNewsEmail)) {
                        isInternationalChecked = checkedTextView.isChecked();
                        prefsEditor.putBoolean(internationalNewsEmail, isInternationalChecked);
                        prefsEditor.commit();
                    }
                }
            });

感谢您提供的任何帮助!!

0 个答案:

没有答案