Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/351.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/search/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 动态设置微调器非持续状态_Java_Android - Fatal编程技术网

Java 动态设置微调器非持续状态

Java 动态设置微调器非持续状态,java,android,Java,Android,我正在开发一个简单的应用程序,遇到了一个动态创建的微调器的状态持久化问题。无论我为动态微调器选择什么,它总是重置为定义的第一个元素。我已经覆盖了onPause和onResume,但没有任何效果。任何帮助都会很好 public class MainActivity extends Activity { private OnItemSelectedListener optionListener = getOptionListener(); // private OnItemSelectedList

我正在开发一个简单的应用程序,遇到了一个动态创建的
微调器
的状态持久化问题。无论我为动态微调器选择什么,它总是重置为定义的第一个元素。我已经覆盖了
onPause
onResume
,但没有任何效果。任何帮助都会很好

public class MainActivity extends Activity {

private OnItemSelectedListener optionListener = getOptionListener();
// private OnItemSelectedListener specificListener;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    ((Spinner)findViewById(R.id.optionsSpinner)).setOnItemSelectedListener(optionListener);
}

@Override
public void onPause()
{
    super.onPause();
    SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(getApplicationContext());
    int generalIndex = ((Spinner)findViewById(R.id.optionsSpinner)).getSelectedItemPosition();
    int specificIndex = ((Spinner)findViewById(R.id.specificOptions)).getSelectedItemPosition();

    prefs.edit().putInt("general", generalIndex).putInt("specific", specificIndex).commit();
}

@Override
public void onResume()
{
    super.onResume();
    SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(getApplicationContext());
    int generalIndex = prefs.getInt("general", -1);
    int specificIndex = prefs.getInt("specific", -1);

    ((Spinner)findViewById(R.id.optionsSpinner)).setSelection(generalIndex);
    ((Spinner)findViewById(R.id.specificOptions)).setSelection(specificIndex);
}

private OnItemSelectedListener getOptionListener()
{
    return new OnItemSelectedListener() {

        @Override
        public void onItemSelected(AdapterView<?> parent, View v, int pos, long id) {

            int resId;
            String selectedOption = parent.getSelectedItem().toString();
            if (selectedOption.equals(getString(R.string.color)))
                resId = R.array.colorsArray;
            else
                resId = R.array.shapesArray;

            ArrayAdapter<CharSequence> adapter = ArrayAdapter.createFromResource(getBaseContext(), resId, android.R.layout.simple_spinner_item);
            adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
            ((Spinner)findViewById(R.id.specificOptions)).setAdapter(adapter);
        }

        @Override
        public void onNothingSelected(AdapterView<?> arg0) { }
    };
}
公共类MainActivity扩展活动{
private OnItemSelectedListener optionListener=getOptionListener();
//private OnItemSelectedListener specificListener;
@凌驾
创建时受保护的void(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
((微调器)findViewById(R.id.optionsSpinner)).setOnItemSelectedListener(optionListener);
}
@凌驾
公共无效暂停()
{
super.onPause();
SharedReferences prefs=PreferenceManager.GetDefaultSharedReferences(getApplicationContext());
int-generandex=((微调器)findViewById(R.id.optionsSpinner)).getSelectedItemPosition();
int specificIndex=((微调器)findViewById(R.id.specificOptions)).getSelectedItemPosition();
prefs.edit().putin(“常规”,generalIndex).putin(“特定”,specificIndex).commit();
}
@凌驾
恢复时公开作废()
{
super.onResume();
SharedReferences prefs=PreferenceManager.GetDefaultSharedReferences(getApplicationContext());
int-generalIndex=prefs.getInt(“general”,-1);
int specific index=prefs.getInt(“specific”,-1);
((微调器)findViewById(R.id.optionsSpinner)).setSelection(generalIndex);
((微调器)findViewById(R.id.specificOptions)).setSelection(specificIndex);
}
private OnItemSelectedListener getOptionListener()
{
返回新的MSelectedListener(){
@凌驾
已选择公共位置(AdapterView父项、视图v、内部位置、长id){
国际剩余;
String selectedOption=parent.getSelectedItem().toString();
if(selectedOption.equals(getString(R.string.color)))
resId=R.array.colorsArray;
其他的
resId=R.array.shapesArray;
ArrayAdapter=ArrayAdapter.createFromResource(getBaseContext(),resId,android.R.layout.simple\u微调器\u项);
setDropDownViewResource(android.R.layout.simple\u微调器\u下拉菜单\u项);
((微调器)findViewById(R.id.specificOptions)).setAdapter(适配器);
}
@凌驾
未选择的公共无效(AdapterView arg0){}
};
}

首先,首选项编辑器
有问题。您需要提交以下首选项:

 SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(getApplicationContext());
    int generalIndex = ((Spinner)findViewById(R.id.optionsSpinner)).getSelectedItemPosition();
    int specificIndex = ((Spinner)findViewById(R.id.specificOptions)).getSelectedItemPosition();

   Editor editor = prefs.edit();
   editor.putInt("general", generalIndex);
   editor.putInt("specific", specificIndex);
   editor.commit();
否则,将不会保存您的首选项

我想指出的另一件事是,您需要避免将
-1
作为默认首选项值,然后将
-1
.setSelection(value);
一起使用,这将导致您出现异常。如果返回-1,请避免任何选择。

了解了该怎么做: 1) .提供两个私有变量(一个用于特定索引,一个用于一般索引) 2) .设置共享首选项中的两个变量 3) 。在onItemSelectedListener中,设置特定选项微调器

public class MainActivity extends Activity {

private int specificIndex;
private int generalIndex;
private OnItemSelectedListener optionListener = getOptionListener();
// private OnItemSelectedListener specificListener;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    ((Spinner)findViewById(R.id.optionsSpinner)).setOnItemSelectedListener(optionListener);
    SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(getApplicationContext());
    // Initial setup
    generalIndex = prefs.getInt("general", 0);
    specificIndex = prefs.getInt("specific", 0);
}

@Override
public void onPause()
{
    super.onPause();
    SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(getApplicationContext());
    generalIndex = ((Spinner)findViewById(R.id.optionsSpinner)).getSelectedItemPosition();
    specificIndex = ((Spinner)findViewById(R.id.specificOptions)).getSelectedItemPosition();

    prefs.edit().putInt("general", generalIndex).putInt("specific", specificIndex).commit();
}

@Override
public void onResume()
{
    super.onResume();
    SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(getApplicationContext());
    generalIndex = prefs.getInt("general", 0);
    specificIndex = prefs.getInt("specific", 0);
}

private OnItemSelectedListener getOptionListener()
{
    return new OnItemSelectedListener() {

        @Override
        public void onItemSelected(AdapterView<?> parent, View v, int pos, long id) {

            int resId;
            String selectedOption = parent.getSelectedItem().toString();
            if (selectedOption.equals(getString(R.string.color)))
                resId = R.array.colorsArray;
            else
                resId = R.array.shapesArray;

            ArrayAdapter<CharSequence> adapter = ArrayAdapter.createFromResource(getBaseContext(), resId, android.R.layout.simple_spinner_item);
            adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
            ((Spinner)findViewById(R.id.specificOptions)).setAdapter(adapter);

            if (specificIndex != 0)
                ((Spinner)findViewById(R.id.specificOptions)).setSelection(specificIndex);
        }

        @Override
        public void onNothingSelected(AdapterView<?> arg0) { }
    };
}
公共类MainActivity扩展活动{
私有索引;
私人综合指数;
private OnItemSelectedListener optionListener=getOptionListener();
//private OnItemSelectedListener specificListener;
@凌驾
创建时受保护的void(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
((微调器)findViewById(R.id.optionsSpinner)).setOnItemSelectedListener(optionListener);
SharedReferences prefs=PreferenceManager.GetDefaultSharedReferences(getApplicationContext());
//初始设置
generalIndex=prefs.getInt(“一般”,0);
specificIndex=prefs.getInt(“specific”,0);
}
@凌驾
公共无效暂停()
{
super.onPause();
SharedReferences prefs=PreferenceManager.GetDefaultSharedReferences(getApplicationContext());
generalIndex=((微调器)findViewById(R.id.options微调器)).getSelectedItemPosition();
specificIndex=((微调器)findViewById(R.id.specificOptions)).getSelectedItemPosition();
prefs.edit().putin(“常规”,generalIndex).putin(“特定”,specificIndex).commit();
}
@凌驾
恢复时公开作废()
{
super.onResume();
SharedReferences prefs=PreferenceManager.GetDefaultSharedReferences(getApplicationContext());
generalIndex=prefs.getInt(“一般”,0);
specificIndex=prefs.getInt(“specific”,0);
}
private OnItemSelectedListener getOptionListener()
{
返回新的MSelectedListener(){
@凌驾
已选择公共位置(AdapterView父项、视图v、内部位置、长id){
国际剩余;
String selectedOption=parent.getSelectedItem().toString();
if(selectedOption.equals(getString(R.string.color)))
resId=R.array.colorsArray;
其他的
resId=R.array.shapesArray;
ArrayAdapter=ArrayAdapter.createFromResource(getBaseContext(),resId,android.R.layout.simple\u微调器\u项);
setDropDownViewResource(android.R.layout.simple\u微调器\u下拉菜单\u项);
((微调器)findViewById(R.id.specificOptions)).setAdapter(适配器);
如果(specificIndex!=0)
((微调器)findViewById(R.id.specificOptions)).setSelection(specificIndex);
}
@凌驾
未选择的公共无效(AdapterView arg0){}
};
}

}

我理解-1位,但它只是为了演示。它实际上从来没有给我-1。关于共享引用的主题,如果你看一下onPause,我会提交首选项:prefs.edit().putin(“general”,generalIndex)。putin(“specific”,specificIndex)。commit();