2013-04-24 143 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实例,这只是无法读取。