-1

明らかな何かが欠けているのか、それともこれが実際にどうすればよいかわからないものなのかどうかはわかりませんが、いくつかの変数をリセットできるようにしたいと思います ( integers)。それらをインクリメントするメソッドがあり、それらは に保存されSharedPreferencesます。ボタンのクリックでこれらを 0 にリセットできるようにしたいと思います。

SharedPreferencesclear(); を使用してクリアできます。コマンドですが、intは同じままであるため、再度呼び出されるとすぐに、リセット前の状態に戻ります。また、それらを0に設定しようとしましたが、それ以上インクリメントできません。変数をリセットまたは削除する方法はありますか?

または、それが不可能/難しすぎる場合、これらの整数を完全にリセットできる別の方法はありますか?

ありがとう

これはインクリメント コードの一部です。これは機能します。私もクリアできSharedPreferencesます。その部分もいいです。機能しない唯一の部分は、int を 0 にリセットすることですが、それを incrementable のままにします

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++;
}});

2番目のものは、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 つの別個のボタン (1 つはインクリメント用、もう 1 つはクリア用) を使用onClickListenersし、ボタンごとに 2 つの別個のボタンを使用する必要があります。そのための@FalconCの例を見ることができます

うまくいけば、それは理にかなっています:)

于 2013-08-02T21:59:57.500 に答える
0

ResetButton をクリックすると、デッド コードがいくつかあると思います。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 に答える