在所有活动中使用相同的微调器

时间:2014-02-19 09:37:14

标签: android android-spinner

我使用相同的微调器来处理我的应用中的所有活动。让我们说,旋转器中的项目是英语,芬兰语,波兰语,等等。当我在一个活动中选择芬兰语时,旋转器的下拉关闭并且可以在旋转器上看到芬兰语。但是当我进入下一个活动时,它不再显示芬兰语,而是在顶部显示英语(项目)。是否有任何方法可以使微调器上的项目出现在所有活动中。或者,除非没有更改,否则不应更改。 在BaseActivity中;

int currentLanguage = spinner.getSelectedItemPosition();
SharedMemory.getInstance().setCurrentPosition(currentLanguage);

Log.i("SET POSITION", Integer.toString(currentLanguage));

在其他活动中保存项目位置的状态;

int position = SharedMemory.getInstance().getCurrentPosition();
    Base_Activity.spinner.setSelection(position);
    Log.i("GET POSITION", Integer.toString(position));

我设法将所选语言设置为在SharedMemory中设置它是Singleton类。 但是我怎样才能在所有活动中获得相同的当前语言。当我改变活动时,我无法得到它。 注意:此微调器位于Base_Activity类的操作栏中,其中所有其他活动都扩展到此类。 谢谢。

3 个答案:

答案 0 :(得分:1)

最后,我设法解决了我的问题。在我尝试在spinner.setOnItemSelectedListener()方法中做东西之前,这确实是错误的。 在我的BaseActivity中;

Configuration conf = getResources().getConfiguration();

    //creating the position of the language in spinner from arraylist 
    int currentLanguage = Arrays.asList(language_codes).indexOf(
            conf.locale.getLanguage());

    spinner.setSelection(currentLanguage);

这使我可以在我更改活动时始终将所选的微调器项保持在顶部。希望这可以帮助别人。 :)

答案 1 :(得分:0)

这是因为其他活动中的微调器与第一个活动中的微调器不同。

您必须将微调器的当前选择作为参数传递给第二个活动,并将其他微调器选择设置为该位置。

在BaseActivity中:

    Intent intent = new Intent(this, SecondActivity.class);
    intent.putExtra("pos", spinner.getSelectedItemPosition());
    startActivity(intent);

在第二个活动中:

    spinner.setSelection(getIntent().getIntExtra("pos", 0));

答案 2 :(得分:0)

单身类应该看起来像这样:

public class SharedMemory {
    public static SharedMemory sharedMem = new SharedMemory();
    private String valueSelected; // or position here

    public SharedMemory getInstance() {
        return sharedMem;
    }

    public String getCurrentLanguage() {
        Log.i("tag","valueSelected: " + valueSelected);
        return valueSelected;
    }

    public void setCurrentLanguage(String currLang) {
        valueSelected = currLang;
        Log.i("tag","valueSelected: " + valueSelected);
    }
}

修改

onItemSelectedListener(...) {
    if(ShareMemory.getInstance().getCurrentLanguage().equalsIgnoreCase("0")) {
          // then set the value to 0
    }else {
       // set the value still but then set the gui also
    }
}

//在onResume或onCreate方法中 写下以下内容:

spinner.setSelection(ShareMemory.getInstance().getCurrentLanguage());

使用Log打印singleTon类中的值,以及微调器的onItemSelected侦听器。