两个链接的微调器未保存为共享首选项
Two linked spinners not saving as shared preferences
我可以使用 .
将一个微调器保存为共享首选项
但是我需要多个微调器相互关联,当我尝试保存它们时遇到问题,我不确定为什么。
这是我的微调器的链接方式。第一个微调器在被选中时启用第二个微调器。
spinner = (Spinner)findViewById(R.id.spnMondayExercise);
adapter = ArrayAdapter.createFromResource(this, R.array.Exercise, android.R.layout.simple_spinner_dropdown_item);
adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
spinner.setAdapter(adapter);
spinner.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {
@Override
public void onItemSelected(AdapterView<?> parent, View view,
int position, long id) {
long item = parent.getItemIdAtPosition(position);
if (item == 0){
monExc = 0;
spinner = (Spinner)findViewById(R.id.spnMondayDuration);
adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
spinner.setAdapter(adapter);
spinner.setEnabled(false);
}
这是由上面的微调器启用的另一个微调器
//Monday Duration
spinner = (Spinner)findViewById(R.id.spnMondayDuration);
adapter = ArrayAdapter.createFromResource(this, R.array.Duration, android.R.layout.simple_spinner_dropdown_item);
adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
spinner.setAdapter(adapter);
spinner.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {
@Override
public void onItemSelected(AdapterView<?> parent, View view,
int position, long id) {
long item = parent.getItemIdAtPosition(position);
if (item == 0){
monDur = 0;
}
else if (item ==1)
{
monDur = .16;
}
else if (item ==2)
{
monDur = .33;
}
这是我的加载数据
private void loadData() {
SharedPreferences prefs = getPreferences(0);
spnMondayDuration.setSelection(prefs.getInt("spnMonDur", 0));
spnMondayExercise.setSelection(prefs.getInt("spnMonExc", 0));
这是我保存偏好的地方:
SharedPreferences.Editor editor = getPreferences(0).edit();
int spnMonDur1 = spnMondayDuration.getSelectedItemPosition();
int spnMonExc1 = spnMondayExercise.getSelectedItemPosition();
editor.putInt("spnMonDur", spnMonDur1);
editor.putInt("spnMonExc", spnMonExc1);
editor.commit();
如果两个微调器的代码在同一个 class 中,那么您就完全弄乱了 spinner
和 adapter
属性。为什么不为不同的微调器和两个不同的适配器创建两个变量?
您的第一个微调器的 onItemSelected()
方法是错误的。首先你将变量指向第二个微调器,为它设置一个适配器,最后你禁用它 - 我真的不知道你这样做的意图是什么。您是要重复使用相同的 Spinner
并用不同的数据填充它(因此具有不同的含义),还是您有两个单独的 Spinner
视图?
假设你有两个不同的Spinner
,我会做这样的事情(代码仍然不够清晰,但作为起点):
// initialize Exercise spinner
spinnerExercise = (Spinner)findViewById(R.id.spnMondayExercise);
adapterExercise = ArrayAdapter.createFromResource(this, R.array.Exercise, android.R.layout.simple_spinner_dropdown_item);
adapterExercise.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
spinnerExercise.setAdapter(adapterExercise);
// initialize Duration spinner
spinnerDuration = (Spinner)findViewById(R.id.spnMondayDuration);
adapterDuration = ArrayAdapter.createFromResource(this, R.array.Duration, android.R.layout.simple_spinner_dropdown_item);
adapterDuration.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
spinnerDuration.setAdapter(adapterDuration);
// disable by default until an exercise is selected
spinnerDuration.setEnabled(false);
spinnerExercise.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {
@Override
public void onItemSelected(AdapterView<?> parent, View view, position, long id) {
long item = parent.getItemIdAtPosition(position);
if (item == 0){
monExc = 0;
spinnerDuration.setEnabled(true);
}
........
}
}
spinnerDuration.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {
@Override
public void onItemSelected(AdapterView<?> parent, View view, int position, long id) {
long item = parent.getItemIdAtPosition(position);
if (item == 0){
monDur = 0;
}
else if (item ==1)
{
monDur = .16;
}
else if (item ==2)
{
monDur = .33;
}
......
}
}
我可以使用
但是我需要多个微调器相互关联,当我尝试保存它们时遇到问题,我不确定为什么。
这是我的微调器的链接方式。第一个微调器在被选中时启用第二个微调器。
spinner = (Spinner)findViewById(R.id.spnMondayExercise);
adapter = ArrayAdapter.createFromResource(this, R.array.Exercise, android.R.layout.simple_spinner_dropdown_item);
adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
spinner.setAdapter(adapter);
spinner.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {
@Override
public void onItemSelected(AdapterView<?> parent, View view,
int position, long id) {
long item = parent.getItemIdAtPosition(position);
if (item == 0){
monExc = 0;
spinner = (Spinner)findViewById(R.id.spnMondayDuration);
adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
spinner.setAdapter(adapter);
spinner.setEnabled(false);
}
这是由上面的微调器启用的另一个微调器
//Monday Duration
spinner = (Spinner)findViewById(R.id.spnMondayDuration);
adapter = ArrayAdapter.createFromResource(this, R.array.Duration, android.R.layout.simple_spinner_dropdown_item);
adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
spinner.setAdapter(adapter);
spinner.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {
@Override
public void onItemSelected(AdapterView<?> parent, View view,
int position, long id) {
long item = parent.getItemIdAtPosition(position);
if (item == 0){
monDur = 0;
}
else if (item ==1)
{
monDur = .16;
}
else if (item ==2)
{
monDur = .33;
}
这是我的加载数据
private void loadData() {
SharedPreferences prefs = getPreferences(0);
spnMondayDuration.setSelection(prefs.getInt("spnMonDur", 0));
spnMondayExercise.setSelection(prefs.getInt("spnMonExc", 0));
这是我保存偏好的地方:
SharedPreferences.Editor editor = getPreferences(0).edit();
int spnMonDur1 = spnMondayDuration.getSelectedItemPosition();
int spnMonExc1 = spnMondayExercise.getSelectedItemPosition();
editor.putInt("spnMonDur", spnMonDur1);
editor.putInt("spnMonExc", spnMonExc1);
editor.commit();
如果两个微调器的代码在同一个 class 中,那么您就完全弄乱了 spinner
和 adapter
属性。为什么不为不同的微调器和两个不同的适配器创建两个变量?
您的第一个微调器的 onItemSelected()
方法是错误的。首先你将变量指向第二个微调器,为它设置一个适配器,最后你禁用它 - 我真的不知道你这样做的意图是什么。您是要重复使用相同的 Spinner
并用不同的数据填充它(因此具有不同的含义),还是您有两个单独的 Spinner
视图?
假设你有两个不同的Spinner
,我会做这样的事情(代码仍然不够清晰,但作为起点):
// initialize Exercise spinner
spinnerExercise = (Spinner)findViewById(R.id.spnMondayExercise);
adapterExercise = ArrayAdapter.createFromResource(this, R.array.Exercise, android.R.layout.simple_spinner_dropdown_item);
adapterExercise.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
spinnerExercise.setAdapter(adapterExercise);
// initialize Duration spinner
spinnerDuration = (Spinner)findViewById(R.id.spnMondayDuration);
adapterDuration = ArrayAdapter.createFromResource(this, R.array.Duration, android.R.layout.simple_spinner_dropdown_item);
adapterDuration.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
spinnerDuration.setAdapter(adapterDuration);
// disable by default until an exercise is selected
spinnerDuration.setEnabled(false);
spinnerExercise.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {
@Override
public void onItemSelected(AdapterView<?> parent, View view, position, long id) {
long item = parent.getItemIdAtPosition(position);
if (item == 0){
monExc = 0;
spinnerDuration.setEnabled(true);
}
........
}
}
spinnerDuration.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {
@Override
public void onItemSelected(AdapterView<?> parent, View view, int position, long id) {
long item = parent.getItemIdAtPosition(position);
if (item == 0){
monDur = 0;
}
else if (item ==1)
{
monDur = .16;
}
else if (item ==2)
{
monDur = .33;
}
......
}
}