Android 使用带有材质微调器的SharedReferences更新活动

Android 使用带有材质微调器的SharedReferences更新活动,android,android-preferences,preferenceactivity,android-sharedpreferences,Android,Android Preferences,Preferenceactivity,Android Sharedpreferences,我在网上找到了这个神奇的材质微调器,我可以根据我的代码修改它: <fr.ganfra.materialspinner.MaterialSpinner android:id="@+id/spinner" android:layout_width="fill_parent" android:layout_height="fill_parent" app:ms_multiline="false" app:ms_bas

我在网上找到了这个神奇的材质微调器,我可以根据我的代码修改它:

<fr.ganfra.materialspinner.MaterialSpinner
        android:id="@+id/spinner"
        android:layout_width="fill_parent"
        android:layout_height="fill_parent"
        app:ms_multiline="false"
        app:ms_baseColor="@color/off"
        app:ms_highlightColor="@color/off"
        app:ms_hintColor="@color/off"
        app:ms_arrowColor="@color/off"
        app:ms_arrowSize="16dp"
        app:ms_alignLabels="false"
        app:ms_floatingLabelColor="@color/off"/>
但是我的微调器只是显示了第一个值,我如何才能使它工作呢?我不认为sharedPrefs是错误的,但它可能是onItemSelected(),我不确定我还能怎么做? PS:我试着为每个职位替换这一行

spinedit.putInt("freq", position);
而不是我现在所拥有的:

spinedit.putInt("freq", freq);
但这也不起作用。 有人愿意为我透露一些想法或资料吗?我将非常感谢我的建议(在上面的评论中):

我的建议(在上面的评论中):



您在哪里设置微调器适配器?您必须在setSelection()之前设置它。值是否正确保存在SharedReferences中?另外,您是否尝试过使用spinner.setSelection(num,false)?我已经编辑了代码,您可以看到我是如何设置适配器的。另外,您在回答中建议的最后一行不是来自sharedPrefs的getString吗?我将num设置为该值,那么它不应该假定pref中的数字吗?只是为了缩小问题的范围:您是否尝试过在onResume()方法中记录num变量(检查它是否是正确的索引)和/或在setSelection中传递1或2 int(检查问题是否出在更新微调器时)?如果是这样的话,结果是什么?天哪,这并没有拯救它!当它这样做时,值是0!好的,正如我所想的,在连接setOnItemSelectedListener之前尝试设置您的值。我假设启动了onNothingSelected并将值保存为0,尝试删除该代码段并测试它,以确认您在哪里设置微调器适配器?您必须在setSelection()之前设置它。值是否正确保存在SharedReferences中?另外,您是否尝试过使用spinner.setSelection(num,false)?我已经编辑了代码,您可以看到我是如何设置适配器的。另外,您在回答中建议的最后一行不是来自sharedPrefs的getString吗?我将num设置为该值,那么它不应该假定pref中的数字吗?只是为了缩小问题的范围:您是否尝试过在onResume()方法中记录num变量(检查它是否是正确的索引)和/或在setSelection中传递1或2 int(检查问题是否出在更新微调器时)?如果是这样的话,结果是什么?天哪,这并没有拯救它!当它这样做时,值是0!好的,正如我所想的,在连接setOnItemSelectedListener之前尝试设置您的值。我假设onNothingSelected正在被激发,并将值保存为0,尝试删除该代码段并测试它,以确认Mine也是以这种方式设置的,但是您如何处理侦听器和微调器?与您一样,侦听器正在被激发,所以问题似乎是,当侦听器方法激发时,某些内容没有被初始化(因此在onCreate()之外声明spinpref和spinedit)。您是否尝试将prefs保存到if/else语句之外?但是我的prefs应该根据所选的位置获取整数,我如何在if/else之外执行此操作?只是检查是否保存了prefs。如果保存了,您需要调试if/else语句我的也是以这种方式设置的,但是您如何执行侦听器和微调器?与您一样,侦听器正在被激发,因此问题似乎是,当侦听器方法激发时,某些东西没有初始化(因此在onCreate()之外声明spinpref和spinedit)。您是否尝试将prefs保存到if/else语句之外?但是我的prefs应该根据所选位置获取整数,我如何在if/else之外执行此操作?只是检查是否保存了prefs。如果是,则需要调试if/else语句
spinedit.putInt("freq", position);
spinedit.putInt("freq", freq);
public class MyActivity extends Activity {
    SharedPreferences spinpref;
    Editor spinedit;

    //PREVENT TYPOS
    private static final String PREF_NAME = "frequency";
    public static final String FREQUENCY = "freq";


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

        //INIT PREFS
        spinpref=getSharedPreferences(PREF_NAME, 0);
        spinedit=spinpref.edit();

        //INIT SPINNER
        ...

        //SET LISTENER
        ...
    }

    @Override
    protected void onResume() {
        int num=spinpref.getInt(FREQUENCY, 0);
        spinner.setSelection(num);
    }

}