0

ボタンが押された状態でタブホスト内の共有設定が機能しない。

押された状態でボタンの背景を変更しています。しかし、電話を再起動(オフとオン)すると、共有設定で状態が保存されません。

ここから参照

タブホスト内のボタンが押された状態の共有設定が再起動時に機能しない

デバッグ時に、isclickはif-else条件でtrueとして表示されます。私はその問題を理解していません。

初めて実行すると、背景が強調表示されたボタンが表示され、再起動しても同じ強調表示された背景が表示されます。

どんな助けでも常にありがたいです。

private boolean isclick ;

@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    seatdirnbtn = (Button) findViewById(R.id.seatdirnbtn);
    prefs = this.getSharedPreferences(prefName, MODE_PRIVATE);

    isclick = prefs.getBoolean("prefName", false);
    System.out.println("bool? " + isclick);

    if (isclick) {
        seatdirnbtn.setBackgroundResource(R.drawable.icon4hlt);
    } else if (!isclick) {
        seatdirnbtn.setBackgroundResource(R.drawable.icon4);
    } 
}


@Override
public void onRestart() {
    super.onRestart();

    if (isclick) {
        seatdirnbtn.setBackgroundResource(R.drawable.icon4);
    } else if (!isclick) {
        seatdirnbtn.setBackgroundResource(R.drawable.icon4hlt);
    }
}

@Override
public void onStop() {
    super.onStop();

    prefs = this.getSharedPreferences(prefName, MODE_PRIVATE);
    editor = prefs.edit();

    editor.putBoolean("prefName", true);
    editor.commit();
}

private View.OnClickListener listner1 = new View.OnClickListener() {
    public void onClick(View v) {
        if (isclick) {
            seatdirnbtn.setBackgroundResource(R.drawable.icon4hlt);

            editor = prefs.edit();
            editor.clear();
            editor.putBoolean("prefName", true);
            editor.commit();
        } else if (!isclick) {
            seatdirnbtn.setBackgroundResource(R.drawable.icon4);
            editor = prefs.edit();
            editor.clear();
            editor.putBoolean("prefName", false);
            editor.commit();
        }
        isclick = !isclick;
    }
};

編集1:

    private boolean isclick  ;

@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    prefs = this.getSharedPreferences(prefName, MODE_PRIVATE);

    isclick = prefs.getBoolean("prefName", true);

    System.out.println("bool? " + isclick);
    Log.i(TAG, " prefname");

    if (isclick) {
        seatdirnbtn.setBackgroundResource(R.drawable.icon4hlt);
    } else if (!isclick) {
        seatdirnbtn.setBackgroundResource(R.drawable.icon4);
    } 

         public void onPause() {
    super.onPause();
    prefs = this.getSharedPreferences(prefName, MODE_PRIVATE);
    // boolean isclick = false;
    editor = prefs.edit();
    // editor.clear();
    editor.putBoolean("prefName", false);
    Log.i(TAG, " prefname");
    editor.commit();
}

@Override
public void onRestart() {
    super.onRestart();
      prefs = this.getSharedPreferences(prefName, MODE_PRIVATE);
        isclick = prefs.getBoolean("prefName", !isclick);

}

@Override
public void onStop() {
    super.onStop();
    getApplicationContext().unbindService(this);

      prefs = this.getSharedPreferences(prefName, MODE_PRIVATE); // boolean
      isclick = false; editor = prefs.edit(); // editor.clear();
      editor.putBoolean("prefName", !isclick); 
      editor.commit();

      }

         private View.OnClickListener listner1 = new View.OnClickListener() {

    public void onClick(View v) {


        if (isclick) {
            seatdirnbtn.setBackgroundResource(R.drawable.icon4hlt);

            editor = prefs.edit();
            editor.clear();
            editor.putBoolean("prefName", false);
            editor.commit();
            isclick = false;
        } else if (!isclick) {
            seatdirnbtn.setBackgroundResource(R.drawable.icon4);
            editor = prefs.edit();
            editor.clear();
            editor.putBoolean("prefName", true);
            editor.commit();
            isclick = true;
        }

    }
};
4

1 に答える 1

2

この編集されたソリューションを試してください:

public class SharedprefsActivity extends Activity  {

    protected static final String TAG = "HvacActivity";
    /** Called when the activity is first created. */
    private Button seatdirnbtn;
    private SharedPreferences prefs;
    private String prefName = "MyPref";
    private SharedPreferences.Editor editor;
    private boolean isclick;
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);

        seatdirnbtn = (Button) findViewById(R.id.seatdirnbtn);      
        seatdirnbtn.setOnClickListener(listner1);       
    }

    public void onResume() {
        super.onResume();
        getPrefAndButtonState();        
    }

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

    @Override
    public void onRestart() {
        super.onRestart();
        getPrefAndButtonState();
    }

    @Override
    public void onStop() {
        super.onStop();
        setPrefAndButtonState();
    }

    public void getPrefAndButtonState(){
        prefs = this.getSharedPreferences(prefName, MODE_PRIVATE);
        isclick = prefs.getBoolean("prefName", false);
        System.out.println("bool? " + isclick);
        if (isclick) {
            seatdirnbtn.setBackgroundResource(R.drawable.icon4hlt);
        } else if (!isclick) {
            seatdirnbtn.setBackgroundResource(R.drawable.icon4);
        }
    }

    public void setPrefAndButtonState(){
        editor = prefs.edit();
        editor.putBoolean("prefName", isclick);
        editor.commit();        
        getPrefAndButtonState();
    }

    private View.OnClickListener listner1 = new View.OnClickListener() {    
        public void onClick(View v) {   
            if (isclick) {
                isclick = false;
                setPrefAndButtonState();            
            } else if (!isclick) {
                isclick = true;
                setPrefAndButtonState();
            }   
        }
    };
}

私はうまくテストしましたが、それは私にとってはうまくいきます。

お役に立てば幸いです。

ありがとう。

于 2012-12-18T11:42:13.063 に答える