-1

我不确定我是否遗漏了一些明显的东西,或者这是否真的是我不知道该怎么做的事情,但我希望能够重置一些变量(integers)。我有一个增加它们的方法,它们保存在SharedPreferences. 我希望能够在单击按钮时将这些重置为 0。

我可以SharedPreferences使用 clear(); 命令,但整数保持不变,因此一旦再次调用它们,它们就会恢复到重置前的状态。我也尝试将它们设置为 0,但是我不能再增加它们了。有没有办法只重置或删除变量?

或者,如果这不可能/太难,有没有另一种方法可以完全重置这些整数?

谢谢

这是递增代码的一部分。这行得通。我也可以清除SharedPreferences;那部分也很好。唯一不起作用的部分是将 int 重置为 0,但保持它可递增

Button PlusOneButton = ((Button)findViewById(R.id.plusonebutton));
        PlusOneButton.setOnClickListener(new OnClickListener() {

            @Override
            public void onClick(View v) {
                intName++;
}});

编辑:有效的最终代码

import android.app.Activity;
import android.content.Intent;
import android.content.SharedPreferences;
import android.content.SharedPreferences.Editor;
import android.os.Bundle;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.TextView;


public class ThirdScreenActivity extends Activity {

    public int myIntPlusOne;

    public static final String PREFS = "MyPrefsFile";

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.screen2);

        SharedPreferences sharedPrefs = getApplicationContext().getSharedPreferences("PREFS", 0);
        myIntPlusOne = sharedPrefs.getInt("myIntPlusOneSaved", 0);


    if ("ListView Item 1".equals(position)) {

        myIntPlusOne = sharedPrefs.getInt("myIntPlusOneSaved", 0);

        TextView PlusOne = ((TextView)findViewById(R.id.plusonetextview));
        PlusOne.setText(String.valueOf(myIntPlusOne));

        Button PlusOneButton = ((Button)findViewById(R.id.plusonebutton));
        PlusOneButton.setOnClickListener(new OnClickListener() {

            @Override
            public void onClick(View v) {

                myIntPlusOne++;
              TextView PlusOne = ((TextView)findViewById(R.id.plusonetextview));
              PlusOne.setText((myIntPlusOne)+"");

              SharedPreferences sharedPrefs = getApplicationContext().getSharedPreferences("PREFS", 0);
              Editor editor = sharedPrefs.edit();
              editor.putInt("myIntPlusOneSaved", myIntPlusOne);
              editor.commit();
            }
        });
    }

    else if... 
    }

      Button btnClear = (Button) findViewById(R.id.clearbtn);
      btnClear.setOnClickListener(new View.OnClickListener() {

       @Override
       public void onClick(View v) {
              myIntPlusOne=0;
              TextView PlusOne = ((TextView)findViewById(R.id.plusonetextview));
              PlusOne.setText("0");
       }
      });

    }

        public void onPause() {
            super.onPause();

            SharedPreferences sharedPrefs = getApplicationContext().getSharedPreferences("PREFS", 0);
            Editor editor = sharedPrefs.edit();
            editor.putInt("myIntPlusOneSaved", myIntPlusOne);
            editor.commit();
         }
}
4

3 回答 3

2

试试这个

SharedPreferences sharedPrefs = getApplicationContext().getSharedPreferences("Prefs", 0);
Editor editor = prefs.edit();

Button PlusOneButton = ((Button)findViewById(R.id.plusonebutton));
PlusOneButton.setOnClickListener(new OnClickListener() {
    @Override
    public void onClick(View v) {
        if(!sharedPrefs.contains("myIntPlusOneSaved")) {
            editor.putInt("myIntPlusOneSaved", 0);
            editor.commit();
        }
        intName++;
        PlusOne.setText(String.valueOf(intName));
    }
}

Button ResetButton = ((Button)findViewById(R.id.resetbutton));
ResetButton.setOnClickListener(new OnClickListener() {
    @Override
    public void onClick(View v) {
        if(!sharedPrefs.contains("myIntPlusOneSaved")) {
            editor.remove("myIntPlusOneSaved");
            editor.putInt("myIntPlusOneSaved", 0);
            editor.commit();
            intName = sharedPrefs.getInt("myIntPlusOneSaved", 0);
            PlusOne.setText(String.valueOf(intName));
        }
    }
}

试一试,说它是否有效。

我假设您已经尝试了以下解决方案,但它不起作用:

Button PlusOneButton = ((Button)findViewById(R.id.plusonebutton));
PlusOneButton.setOnClickListener(new OnClickListener() {
    @Override
    public void onClick(View v) {
        intName++;
        PlusOne.setText(String.valueOf(intName));
    }
}

Button ResetButton = ((Button)findViewById(R.id.resetbutton));
ResetButton.setOnClickListener(new OnClickListener() {
    @Override
    public void onClick(View v) {
        intName = 0;
        PlusOne.setText(String.valueOf(intName));
    }
}

更改变量/构造函数/等的名称。以适合您的代码。

于 2013-08-02T21:43:06.977 回答
2

据我所知,您的点击监听器有 2 种方法

第一个是您最初发布的增量方法:

Button PlusOneButton = ((Button)findViewById(R.id.plusonebutton));
        PlusOneButton.setOnClickListener(new OnClickListener() {

            @Override
            public void onClick(View v) {
                intName++;
}});

第二个使用method2声明的内部method

public void method(View view) {

    Button PlusOneButton = ((Button)findViewById(R.id.plusonebutton));
    PlusOneButton.setOnClickListener(new OnClickListener() {

        @Override
        public void onClick(View v) {
                method2();
        }
    }); 
}

我没有看到你实际调用的代码,method但是一旦你这样做了,你就会覆盖onClickEvent按钮内触发的代码,因为第一个setOnClickListener永远不会被再次调用。我认为这正在发生,因为我引用:

我也尝试将它们设置为 0,但是我不能再增加它们了。有没有办法只重置或删除变量?

正如您在方法2中看到的:

public void method2() {
    SharedPreferences sharedPrefs = this.getSharedPreferences(PREFS, MODE_PRIVATE);
    Editor editor = sharedPrefs.edit();
    editor.clear();
    editor.commit();
        myIntPlusOne = 0;
}

你永远不会再增加myIntPlusOne一次,就像你在清除它之后所说的那样,它永远不会再增加一次。

您确实应该使用 2 个单独的按钮(一个用于递增,一个用于清除)并onClickListeners为每个按钮使用 2 个单独的按钮。您可以查看@FalconC 的示例

希望这是有道理的:)

于 2013-08-02T21:59:57.500 回答
0

我认为当你点击你的重置按钮时你有一些死代码。您检查是否myIntPlusOneSaved不在选项中,然后尝试将其删除。就个人而言,我会删除这个条件:

ResetButton.setOnClickListener(new OnClickListener() {

    @Override
    public void onClick(View v) {
        SharedPreferences sharedPrefs = getApplicationContext().getSharedPreferences("PREFS", 0);
        Editor editor = sharedPrefs.edit();
        editor.putInt("myIntPlusOneSaved", 0).commit();
        myIntPlusOne = 0;
        TextView PlusOne = ((TextView)findViewById(R.id.plusonetextview));
        PlusOne.setText(String.valueOf(myIntPlusOne));
    }
});

对于您的 ClassCastException,我认为您过去在偏好中放置了一个字符串,现在您尝试使用getInt. 检查你是否有一些putString("myIntPlusOneSaved", xxx)地方并将它们替换为putInt. 您的首选项中可能有来自旧版本应用程序的字符串。然后,您可以删除您的应用程序并重新安装它或仅删除myIntPlusOneSaved首选项。

于 2013-08-03T09:59:40.253 回答