微调器中的 SharedPreferances
SharedPreferances in Spinners
我对微调器的共享偏好有问题,我有 2 个微调器,我想用共享偏好保存我的微调器我可以保存第一个微调器但我不能保存第二个微调器,有人可以帮助我吗
谢谢大家。
我对微调器的共享偏好有问题,我有 2 个微调器,我想用共享偏好保存我的微调器我可以保存第一个微调器但我不能保存第二个微调器,有人可以帮助我吗
感谢大家
public class MyAndroidAppActivity extends AppCompatActivity {
String india[]={"humains","elfes","hobbits"};
String m[]={"PUNE","Mumbai","yoo"};
String b[]={"Arwen","Elrond","Galadriel","Legolas"};
String u[]={"sup","trankill","Conor","Mcgregor","Nate Diaz"};
Spinner s,s1,s2;
private Button btnSubmit;
SharedPreferences mypref;
final String KEY_SavedSel = "Saved Selection";
final String KEY_SavedSe2 = "Saved Selection";
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_my_android_app);
s=(Spinner)findViewById(R.id.spinner1);
s1=(Spinner)findViewById(R.id.spinner2);
btnSubmit = (Button) findViewById(R.id.btnSubmit);
final ArrayAdapter<String>ia=new ArrayAdapter<String>(this,android.R.layout.simple_spinner_item,india);
final ArrayAdapter<String>ma=new ArrayAdapter<String>(this,android.R.layout.simple_spinner_item,m);
final ArrayAdapter<String>ba=new ArrayAdapter<String>(this,android.R.layout.simple_spinner_item,b);
final ArrayAdapter<String>ua=new ArrayAdapter<String>(this,android.R.layout.simple_spinner_item,u);
ia.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
s.setAdapter(ia);
mypref = getPreferences(MODE_PRIVATE);
int prefsInt = mypref.getInt(KEY_SavedSel, -1);
int prefsInt1 = mypref.getInt(KEY_SavedSe2,-1);
if(prefsInt != -1){
s.setSelection(prefsInt);
}
if(prefsInt1 != -1){
s1.setSelection(prefsInt1);
}
s.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {
@Override
public void onItemSelected(AdapterView<?> parent, View view, int position, long id) {
switch (parent.getId()){
case R.id.spinner1:{
SharedPreferences.Editor editor = getPreferences(MODE_PRIVATE).edit();
editor.putInt(KEY_SavedSel, position);
editor.putInt(KEY_SavedSe2, position);
editor.commit();
if(india[position].equals("humains")){
ma.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
s1.setAdapter(ma);
}
if(india[position].equals("elfes")){
ba.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
s1.setAdapter(ba);
}
if(india[position].equals("hobbits")){
ua.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
s1.setAdapter(ua);
}
}
}
}
@Override
public void onNothingSelected(AdapterView<?> parent) {
}
});
btnSubmit.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
Toast.makeText(MyAndroidAppActivity.this,
"Resultat : " +
"\nSpinner 1 : "+ String.valueOf(s.getSelectedItem()) +
"\nSpinner 2 : "+ String.valueOf(s1.getSelectedItem()),
Toast.LENGTH_SHORT).show();
}
});
}
}
您必须使用两个不同的密钥:
以下两个相同:
final String KEY_SavedSel = "Saved Selection";
final String KEY_SavedSe2 = "Saved Selection";
按如下方式更改它们:
final String KEY_SavedSel = "Saved Selection1";
final String KEY_SavedSe2 = "Saved Selection2";
并且在设置适配器时您没有考虑 spinner2 的项目选择。您还需要为微调器 2 赋值。同时添加以下案例。
case R.id.spinner2:{
SharedPreferences.Editor editor = getPreferences(MODE_PRIVATE).edit();
// editor.putInt(KEY_SavedSel, position);
// your remaining code.
editor.putInt(KEY_SavedSe2, position);
editor.commit();
}
SharedPreferences 键必须不同,否则第二个微调器将覆盖从第一个微调器保存的值
例如。
final String KEY_SavedSel = "Saved Selection";
final String KEY_SavedSe2 = "Saved Selection2";
然后您可以如下使用它并稍后在您的代码中检索值
s.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {
@Override
public void onItemSelected(AdapterView<?> parent, View view, int position, long id) {
SharedPreferences.Editor editor = getPreferences(MODE_PRIVATE).edit();
editor.putInt(KEY_SavedSel, position);
editor.commit();
if (india[position].equals("humains")) {
ma.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
s1.setAdapter(ma);
}
if (india[position].equals("elfes")) {
ba.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
s1.setAdapter(ba);
}
if (india[position].equals("hobbits")) {
ua.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
s1.setAdapter(ua);
}
s1.setSelection(mypref.getInt(KEY_SavedSe2, -1));
}
@Override
public void onNothingSelected(final AdapterView<?> adapterView) {
}
});
s1.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {
@Override
public void onItemSelected(AdapterView<?> parent, View view, int position, long id) {
SharedPreferences.Editor editor = getPreferences(MODE_PRIVATE).edit();
editor.putInt(KEY_SavedSe2, position);
editor.commit();
if (b[position].equals("Arwen")) {
// TODO: Do something
}
if (b[position].equals("Elrond")) {
// TODO: Do something
}
if (b[position].equals("Galadriel")) {
// TODO: Do something
}
if (b[position].equals("Legolas")) {
// TODO: Do something
}
}
@Override
public void onNothingSelected(final AdapterView<?> adapterView) {
}
});
}
您还应该添加以下行
s1.setSelection(mypref.getInt(KEY_SavedSe2, -1));
在您的 s.setOnItemSelectedListener
内,如上所示,因为每次重新启动应用程序时都会调用 s.setOnItemSelectedListener
,并且它没有适当地设置第二个微调器选择的项目,通过添加它可以解决您的初始问题。
我对微调器的共享偏好有问题,我有 2 个微调器,我想用共享偏好保存我的微调器我可以保存第一个微调器但我不能保存第二个微调器,有人可以帮助我吗 谢谢大家。 我对微调器的共享偏好有问题,我有 2 个微调器,我想用共享偏好保存我的微调器我可以保存第一个微调器但我不能保存第二个微调器,有人可以帮助我吗 感谢大家
public class MyAndroidAppActivity extends AppCompatActivity {
String india[]={"humains","elfes","hobbits"};
String m[]={"PUNE","Mumbai","yoo"};
String b[]={"Arwen","Elrond","Galadriel","Legolas"};
String u[]={"sup","trankill","Conor","Mcgregor","Nate Diaz"};
Spinner s,s1,s2;
private Button btnSubmit;
SharedPreferences mypref;
final String KEY_SavedSel = "Saved Selection";
final String KEY_SavedSe2 = "Saved Selection";
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_my_android_app);
s=(Spinner)findViewById(R.id.spinner1);
s1=(Spinner)findViewById(R.id.spinner2);
btnSubmit = (Button) findViewById(R.id.btnSubmit);
final ArrayAdapter<String>ia=new ArrayAdapter<String>(this,android.R.layout.simple_spinner_item,india);
final ArrayAdapter<String>ma=new ArrayAdapter<String>(this,android.R.layout.simple_spinner_item,m);
final ArrayAdapter<String>ba=new ArrayAdapter<String>(this,android.R.layout.simple_spinner_item,b);
final ArrayAdapter<String>ua=new ArrayAdapter<String>(this,android.R.layout.simple_spinner_item,u);
ia.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
s.setAdapter(ia);
mypref = getPreferences(MODE_PRIVATE);
int prefsInt = mypref.getInt(KEY_SavedSel, -1);
int prefsInt1 = mypref.getInt(KEY_SavedSe2,-1);
if(prefsInt != -1){
s.setSelection(prefsInt);
}
if(prefsInt1 != -1){
s1.setSelection(prefsInt1);
}
s.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {
@Override
public void onItemSelected(AdapterView<?> parent, View view, int position, long id) {
switch (parent.getId()){
case R.id.spinner1:{
SharedPreferences.Editor editor = getPreferences(MODE_PRIVATE).edit();
editor.putInt(KEY_SavedSel, position);
editor.putInt(KEY_SavedSe2, position);
editor.commit();
if(india[position].equals("humains")){
ma.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
s1.setAdapter(ma);
}
if(india[position].equals("elfes")){
ba.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
s1.setAdapter(ba);
}
if(india[position].equals("hobbits")){
ua.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
s1.setAdapter(ua);
}
}
}
}
@Override
public void onNothingSelected(AdapterView<?> parent) {
}
});
btnSubmit.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
Toast.makeText(MyAndroidAppActivity.this,
"Resultat : " +
"\nSpinner 1 : "+ String.valueOf(s.getSelectedItem()) +
"\nSpinner 2 : "+ String.valueOf(s1.getSelectedItem()),
Toast.LENGTH_SHORT).show();
}
});
}
}
您必须使用两个不同的密钥:
以下两个相同:
final String KEY_SavedSel = "Saved Selection";
final String KEY_SavedSe2 = "Saved Selection";
按如下方式更改它们:
final String KEY_SavedSel = "Saved Selection1";
final String KEY_SavedSe2 = "Saved Selection2";
并且在设置适配器时您没有考虑 spinner2 的项目选择。您还需要为微调器 2 赋值。同时添加以下案例。
case R.id.spinner2:{
SharedPreferences.Editor editor = getPreferences(MODE_PRIVATE).edit();
// editor.putInt(KEY_SavedSel, position);
// your remaining code.
editor.putInt(KEY_SavedSe2, position);
editor.commit();
}
SharedPreferences 键必须不同,否则第二个微调器将覆盖从第一个微调器保存的值
例如。
final String KEY_SavedSel = "Saved Selection";
final String KEY_SavedSe2 = "Saved Selection2";
然后您可以如下使用它并稍后在您的代码中检索值
s.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {
@Override
public void onItemSelected(AdapterView<?> parent, View view, int position, long id) {
SharedPreferences.Editor editor = getPreferences(MODE_PRIVATE).edit();
editor.putInt(KEY_SavedSel, position);
editor.commit();
if (india[position].equals("humains")) {
ma.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
s1.setAdapter(ma);
}
if (india[position].equals("elfes")) {
ba.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
s1.setAdapter(ba);
}
if (india[position].equals("hobbits")) {
ua.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
s1.setAdapter(ua);
}
s1.setSelection(mypref.getInt(KEY_SavedSe2, -1));
}
@Override
public void onNothingSelected(final AdapterView<?> adapterView) {
}
});
s1.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {
@Override
public void onItemSelected(AdapterView<?> parent, View view, int position, long id) {
SharedPreferences.Editor editor = getPreferences(MODE_PRIVATE).edit();
editor.putInt(KEY_SavedSe2, position);
editor.commit();
if (b[position].equals("Arwen")) {
// TODO: Do something
}
if (b[position].equals("Elrond")) {
// TODO: Do something
}
if (b[position].equals("Galadriel")) {
// TODO: Do something
}
if (b[position].equals("Legolas")) {
// TODO: Do something
}
}
@Override
public void onNothingSelected(final AdapterView<?> adapterView) {
}
});
}
您还应该添加以下行
s1.setSelection(mypref.getInt(KEY_SavedSe2, -1));
在您的 s.setOnItemSelectedListener
内,如上所示,因为每次重新启动应用程序时都会调用 s.setOnItemSelectedListener
,并且它没有适当地设置第二个微调器选择的项目,通过添加它可以解决您的初始问题。