简体   繁体   English

Java 代码无法正常工作 - 为什么会这样?

[英]Java code does not work properly - why so?

I am new to Java and Android Studio, I decided to get Spinner to switch the application theme in the settings, but the program does not work correctly.我是 Java 和 Android Studio 的新手,我决定让 Spinner 在设置中切换应用程序主题,但程序无法正常工作。

When you select “Light Theme” in SharedPreferences, “Dark Theme” is saved, when you select “Dark Theme” - “Dark Gray Theme”, “Dark Gray Theme” - “Light Theme”.当您在 SharedPreferences 中 select “浅色主题”时,“深色主题”被保存,当您 select “深色主题” - “深灰色主题”,“深灰色主题” - “浅色主题”时。 I need to correct this misunderstanding.我需要纠正这个误解。 Method "ThemeUtils.changeToTheme (Theme);"方法“ThemeUtils.changeToTheme(主题);” not implemented.未实现。

SettingsActivity设置活动

public class SettingsActivity extends AppCompatActivity  {
SharedPreferences colorPref;


public static final String COLOR_PREF = "l";

Spinner ThemeSpinner;
String Theme;
@Override
protected void onCreate(Bundle savedInstanceState) {

    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_settings);
    colorPref = getSharedPreferences(COLOR_PREF, Context.MODE_PRIVATE);

    ThemeSpinner = (Spinner) findViewById(R.id.SpinnerTheme);
    final ArrayAdapter<?> adapter = ArrayAdapter.createFromResource(this, R.array.Themes, android.R.layout.simple_spinner_item);
    adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
    ThemeSpinner.setAdapter(adapter);
    ThemeSpinner.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {
                    @Override
        public void onItemSelected(AdapterView<?> adapterView, View view, int position, long id) {
             Theme = (String)adapterView.getItemAtPosition(position 
            colorPref = getPreferences(MODE_PRIVATE);
            boolean hasVisited = colorPref.getBoolean("hasVisited", false); 
            String savedTheme = colorPref.getString(COLOR_PREF, ""); 

            if (!hasVisited) {
                SharedPreferences.Editor e = colorPref.edit();
                String savedTheme_First = getString(R.string.Pink_White);
                savedTheme = savedTheme_First;                e.putString(COLOR_PREF, savedTheme);
                e.putBoolean("hasVisited", true);
                e.apply();
            }

            if(savedTheme != Theme){
                SaveTheme();
                ThemeUtils.changeToTheme(Theme);
                Toast toast = Toast.makeText(getApplicationContext(), "Selecrted : " + savedTheme, Toast.LENGTH_SHORT);
                toast.show();
            }
        }

        @Override
        public void onNothingSelected(AdapterView<?> parent) {

        }
    });

}

    public void SaveTheme(){

        colorPref = getPreferences(MODE_PRIVATE);
        SharedPreferences.Editor ed = colorPref.edit();
        ed.putString(COLOR_PREF, Theme);
        ed.apply();
    }

Array.xml数组.xml

<string-array name="Themes">
        <item>@string/Pink_White_rus</item>
        <item>@string/Pink_Dark_rus</item>
        <item>@string/Pink_VeryDark_rus</item>
    </string-array>

strings.xml字符串.xml

<string name="Pink_White">Light Theme</string>
<string name="Pink_Dark">Dark Gray Theme</string>
<string name="Pink_VeryDark">Dark Theme</string>

Spinner positions can be maintained by storing their position value as provided by the OnItemSelectedListener, this can be stored in SharedPreferences and then this can be set as spinner.setSelection() method call可以通过存储 OnItemSelectedListener 提供的 position 值来维护微调器位置,这可以存储在 SharedPreferences 中,然后可以将其设置为 spinner.setSelection() 方法调用

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM