2013-04-24 43 views
0

我開發的應用程序在那裏我有兩個seekbars &我想用份額的喜好,這樣每當用戶打開該應用程序,他應該得到他所作出最後的變化來存儲自己的進步。我已經完成了保存1個搜索欄,但在2個搜索欄的情況下沒有得到正確的答案。可以請你幫我節省2 seekbars使用共享偏好

public class Apartment extends Activity implements SeekBar.OnSeekBarChangeListener { 

    SeekBar seekBar,Seekbar; 

    private int newProgressValue,currentProgress; 
    private int newProgressValue1,currentProgress1; 
    private SharedPreferences sharedPreferences,sharedPreferences1 ; 
    private String Key_PROGRESS = "key_progress"; 
    private String Key = "key_value"; 
    private String PREFERENCE_PROGRESS = "preference_progress"; 
    private String Key_PROGRESS1 = "key_progress1"; 
    private String Key1 = "key_value1"; 
    private String PREFERENCE_PROGRESS1 = "preference_progress1"; 

    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     sharedPreferences = getSharedPreferences(PREFERENCE_PROGRESS , Context.MODE_PRIVATE); 
     currentProgress = sharedPreferences.getInt(Key_PROGRESS, 0); 


     sharedPreferences1 = getSharedPreferences(PREFERENCE_PROGRESS1 , Context.MODE_PRIVATE); 
     currentProgress1 = sharedPreferences1.getInt(Key_PROGRESS1, 0); 

     setContentView(R.layout.activity_apart); 
     seekBar=(SeekBar)findViewById(R.id.seekbar); 
     Seekbar=(SeekBar)findViewById(R.id.seekbar1); 
     int max = 5; 
     seekBar.setMax(max); 
     Seekbar.setMax(max); 
     seekBar.setProgress(currentProgress); 
     Seekbar.setProgress(currentProgress1); 

     seekBar.setOnSeekBarChangeListener(this); 
Seekbar.setOnSeekBarChangeListener(this); 

    } 
    public void onProgressChanged(SeekBar arg0, int arg1, boolean arg2) { 
     // TODO Auto-generated method stub 

    } 
    public void onStartTrackingTouch(SeekBar seekBar) { 
     // TODO Auto-generated method stub 

    } 
    public void onStopTrackingTouch(SeekBar seekBar) { 

     // TODO Auto-generated method stub 

newProgressValue = seekBar.getProgress(); 

     currentProgress = newProgressValue ; 

     SharedPreferences.Editor editor = sharedPreferences.edit(); 
     editor.putInt(Key_PROGRESS, newProgressValue); 

     editor.commit(); 

    } 
    public void onStopTrackingTouch1(SeekBar Seekbar) { 

newProgressValue1 = Seekbar.getProgress(); 

     currentProgress1 = newProgressValue1 ; 

     SharedPreferences.Editor editor = sharedPreferences1.edit(); 
     editor.putInt(Key_PROGRESS1, newProgressValue1); 

     editor.commit(); 

    } 

} 

回答

0
public void onStopTrackingTouch1(SeekBar Seekbar) { 

     newProgressValue1 = Seekbar.getProgress(); 

     currentProgress1 = newProgressValue1 ; 

     SharedPreferences.Editor editor = sharedPreferences1.edit(); 
     editor.putInt(Key_PROGRESS1, newProgressValue1); 

     editor.commit(); 

    } 

此方法不會被調用。這樣,您只能得到一個值Seekbar

您應該註冊SeekBar.OnSeekBarChangeListener的兩個不同實現,第一個爲SeekBar,另一個爲後者。你可以通過anonmyus內部類:

seekBar.setOnSeekBarChangeListener(new OnSeekBarChangeListener() { 

@Override 
public void onStopTrackingTouch(SeekBar seekBar) { 

     currentProgress = newProgressValue ; 

     SharedPreferences.Editor editor = sharedPreferences.edit(); 
     editor.putInt(Key_PROGRESS, newProgressValue); 

     editor.commit(); 

} 

@Override 
public void onStartTrackingTouch(SeekBar seekBar) { 

} 

@Override 
public void onProgressChanged(SeekBar seekBar, int progress, 
       boolean fromUser) { 
} 
}); 


    Seekbar.setOnSeekBarChangeListener(new OnSeekBarChangeListener() { 

@Override 
public void onStopTrackingTouch(SeekBar seekBar) { 
      newProgressValue1 = Seekbar.getProgress(); 

      currentProgress1 = newProgressValue1 ; 

      SharedPreferences.Editor editor = sharedPreferences1.edit(); 
      editor.putInt(Key_PROGRESS1, newProgressValue1); 

      editor.commit(); 

} 

@Override 
public void onStartTrackingTouch(SeekBar seekBar) { 
    } 

@Override 
public void onProgressChanged(SeekBar seekBar, int progress, 
       boolean fromUser) { 

} 
}); 
0

你有一個非常糟糕的命名變量的方法。與其說他們seekbarSeekbar,你會更好美其名曰seekbar1seekbar2。然而,你的變量名保持...您的問題是,你正在使用同一個偵聽 - 因此同樣的方法onStopTrackingTouch將呼籲雙方SeekBars。只要加入onStopTrackingTouch1什麼也不做。相反,你需要檢查兩者中的哪一個調用方法並相應地處理它;是這樣的:

public void onStopTrackingTouch(SeekBar seek) { 
    if(seek == seekbar) { 
     newProgressValue = seekbar.getProgress(); 
     currentProgress = newProgressValue; 
     SharedPreferences.Editor editor = sharedPreferences.edit(); 
     editor.putInt(Key_PROGRESS, newProgressValue); 
     editor.commit(); 
    } 
    else if(seek == Seekbar) { 
     newProgressValue1 = Seekbar.getProgress(); 
     currentProgress1 = newProgressValue1 ; 
     SharedPreferences.Editor editor = sharedPreferences1.edit(); 
     editor.putInt(Key_PROGRESS1, newProgressValue1); 
     editor.commit(); 
    } 
} 

我不批准你的變量名的使用,也評論你的代碼結構 - 只是指出爲什麼你會遇到的問題。

+0

太謝謝你了 – user1665481 2013-04-24 10:03:36

0

的問題是,您使用的同時爲seekbars同聽衆沒有一個檢查使用,這裏是正確的代碼:

public class Apartment extends Activity implements SeekBar.OnSeekBarChangeListener { 

SeekBar seekBar, Seekbar; 

private int newProgressValue, currentProgress; 
private int newProgressValue1, currentProgress1; 
private SharedPreferences sharedPreferences, sharedPreferences1; 
private String Key_PROGRESS = "key_progress"; 
private String Key = "key_value"; 
private String PREFERENCE_PROGRESS = "preference_progress"; 
private String Key_PROGRESS1 = "key_progress1"; 
private String Key1 = "key_value1"; 
private String PREFERENCE_PROGRESS1 = "preference_progress1"; 

@Override 
public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    sharedPreferences = getSharedPreferences(PREFERENCE_PROGRESS, Context.MODE_PRIVATE); 
    currentProgress = sharedPreferences.getInt(Key_PROGRESS, 0); 

    sharedPreferences1 = getSharedPreferences(PREFERENCE_PROGRESS1, Context.MODE_PRIVATE); 
    currentProgress1 = sharedPreferences1.getInt(Key_PROGRESS1, 0); 

    setContentView(R.layout.activity_apart); 
    seekBar = (SeekBar) findViewById(R.id.seekbar); 
    Seekbar = (SeekBar) findViewById(R.id.seekbar1); 
    int max = 5; 
    seekBar.setMax(max); 
    Seekbar.setMax(max); 
    seekBar.setProgress(currentProgress); 
    Seekbar.setProgress(currentProgress1); 
    seekBar.setOnSeekBarChangeListener(this); 
    Seekbar.setOnSeekBarChangeListener(this); 

} 

public void onProgressChanged(SeekBar arg0, int arg1, boolean arg2) { 
} 

public void onStartTrackingTouch(SeekBar seekBar) { 
} 

public void onStopTrackingTouch(SeekBar seekBar) { 
    if (seekBar.getID() == R.id.seekbar) { 
     newProgressValue = seekBar.getProgress(); 
     currentProgress = newProgressValue; 

     SharedPreferences.Editor editor = sharedPreferences.edit(); 
     editor.putInt(Key_PROGRESS, newProgressValue); 

     editor.commit(); 

    } else { 
     newProgressValue1 = seekBar.getProgress(); 
     currentProgress1 = newProgressValue; 
     SharedPreferences.Editor editor = sharedPreferences1.edit(); 
     editor.putInt(Key_PROGRESS1, newProgressValue1); 

     editor.commit(); 

    } 
} 

}

這應該做你想要的東西,但實際上,你應該看看一個正確的圖案,當你在的Android和Java的一般開發使用。

您正在使用搜索條和SeekBar實例,這只是無法讀取。