如何添加 SharedPreferences
How to add SharedPreferences
我是编程初学者!现在,我在 Android Studio 中使用 android 个应用程序。我试图制作三个按钮,它们通过 webview 帮助 link 三个 HTML 页面。但是,有一个问题是我无法添加共享首选项来保存单击的按钮。如果我重新进入该应用程序,则不会保存更改。
这是我的主要 Activity:
package com.example.myapp;
import androidx.appcompat.app.AlertDialog;
import androidx.appcompat.app.AppCompatActivity;
import androidx.appcompat.widget.AppCompatRadioButton;
import android.content.Context;
import android.content.DialogInterface;
import android.content.Intent;
import android.graphics.Color;
import android.os.Build;
import android.os.Bundle;
import android.os.Handler;
import android.os.StrictMode;
import android.text.method.LinkMovementMethod;
import android.util.Log;
import android.view.Display;
import android.view.View;
import android.view.WindowManager;
import android.webkit.WebSettings;
import android.webkit.WebView;
import android.webkit.WebViewClient;
import android.widget.RadioGroup;
import android.widget.TextView;
import android.widget.Toast;
public class MainActivity extends AppCompatActivity {
WebView view;
AppCompatRadioButton rbLeft, rbRight, rbCenter;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
rbLeft = findViewById(R.id.rbLeft);
rbRight = findViewById(R.id.rbRight);
rbCenter = findViewById(R.id.rbCenter);
StrictMode.VmPolicy.Builder builder = new StrictMode.VmPolicy.Builder();
StrictMode.setVmPolicy(builder.build());
view = (WebView) this.findViewById(R.id.webView);
view.getSettings().setJavaScriptEnabled(true);
view.getSettings().setLoadsImagesAutomatically(true);
view.setScrollBarStyle(View.SCROLLBARS_INSIDE_OVERLAY);
view.loadUrl("file:///android_asset/index1.html");
}
private class MyBrowser extends WebViewClient implements com.example.myapp.MyBrowser {
@Override
public boolean shouldOverrideurlLoading(WebView view, String url){
view.loadUrl(url);
return true;
}
}
public void onRadioButtonClicked(View views){
boolean isSelected = ((AppCompatRadioButton)views).isChecked();
switch (views.getId()){
case R.id.rbLeft:
if (isSelected){
rbLeft.setTextColor(Color.WHITE);
rbRight.setTextColor(Color.RED);
rbCenter.setTextColor(Color.RED);
view.loadUrl("file:///android_asset/index1.html");
}
break;
case R.id.rbCenter:
if (isSelected){
rbLeft.setTextColor(Color.RED);
rbRight.setTextColor(Color.RED);
rbCenter.setTextColor(Color.WHITE);
view.loadUrl("file:///android_asset/info.html");
}
break;
case R.id.rbRight:
if (isSelected){
rbLeft.setTextColor(Color.RED);
rbRight.setTextColor(Color.WHITE);
rbCenter.setTextColor(Color.RED);
view.loadUrl("file:///android_asset/qollanma.html");
}
break;
}
}
boolean doubleBackToExitPressedOnce;
@Override
public void onBackPressed() {
if (doubleBackToExitPressedOnce) {
new AlertDialog.Builder(this)
.setTitle("Halal Check")
.setMessage("Dasturdan chiqmoqchimisiz?")
.setPositiveButton("Ha",
new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog,
int which) {
finish();
}
}).setNegativeButton("Yo'q", null).show();
return;
} else {
if (view.canGoBack()) {
view.goBack();
} else {
}
}
this.doubleBackToExitPressedOnce = true;
if (getApplicationContext() == null) {
return;
} else {
Toast.makeText(this, "Iltimos, Dasturdan chiqish uchun yana bir marta bosing!",
Toast.LENGTH_SHORT).show();
}
new Handler().postDelayed(new Runnable() {
@Override
public void run() {
doubleBackToExitPressedOnce = false;
}
}, 2000);
}
}
拜托,如果有人知道这件事,请帮助我!
如果可能的话,请展示它在我的代码中的表现。
感谢您的关注!
如果我对你的目标的理解是正确的,这就是你实现目标的方式。
- 选择单选按钮后,应用会将选择的单选按钮保存到 SharedPreferences。
- 下次加载应用程序时,它将检查 SharedPreferences 值并加载适当的 HTML 文件。
因此,在您的 onRadioButtonClicked()
上,您可以添加以下代码来保存按下的单选按钮:
public void onRadioButtonClicked(View views){
boolean isSelected = ((AppCompatRadioButton) views).isChecked();
SharedPreferences sharedPref = getSharedPreferences("omg", Context.MODE_PRIVATE);
SharedPreferences.Editor editor = sharedPref.edit();
switch (views.getId()){
case R.id.rbLeft:
if (isSelected){
rbLeft.setTextColor(Color.WHITE);
rbRight.setTextColor(Color.RED);
rbCenter.setTextColor(Color.RED);
view.loadUrl("file:///android_asset/index1.html");
editor.putString("last_button", "rbLeft");
editor.apply();
}
break;
case R.id.rbCenter:
if (isSelected){
rbLeft.setTextColor(Color.RED);
rbRight.setTextColor(Color.RED);
rbCenter.setTextColor(Color.WHITE);
view.loadUrl("file:///android_asset/info.html");
editor.putString("last_button", "rbCenter");
editor.apply();
}
break;
case R.id.rbRight:
if (isSelected){
rbLeft.setTextColor(Color.RED);
rbRight.setTextColor(Color.WHITE);
rbCenter.setTextColor(Color.RED);
view.loadUrl("file:///android_asset/qollanma.html");
editor.putString("last_button", "rbRight");
editor.apply();
}
break;
}
}
此代码将生成(如果没有匹配的 SharedPreference)或保存(如果有匹配的 SharedPreference)一个名为 "omg" 的 SharedPreference,并放置一个值单选按钮名称和键名称 "last_button"在您的设备存储中像这样:
└ data\data\com.example.package\shared_prefs
- omg.xml
└ data\data\com.example.package\shared_prefs\omg.xml
...
<string name="last_button">rbLeft</string>
...
因此,最后一件事是在加载应用程序时加载 SharedPreference 值。在你的 onCreate()
:
...
view.getSettings().setSomeSettings();
view.setScrollBarStyle(Blabla);
SharedPreferences sharedPref = getSharedPreferences("omg", Context.MODE_PRIVATE)
switch (sharedPref.getString("last_button", "This will be the value when there was no matching key.") {
case "rbLeft":
rbLeft.setChecked(true);
view.loadUrl("file:///android_asset/index1.html");
break;
case "rbCenter":
rbCenter.setChecked(true);
view.loadUrl("file:///android_asset/info.html");
break;
case "rbRight":
rbRight.setChecked(true);
view.loadUrl("file:///android_asset/qollanma.html");
break;
case "This will be the value when there was no matching key.":
throw IllegalStateException("There was no matching key in omg SharedPreference.");
break;
}
我是编程初学者!现在,我在 Android Studio 中使用 android 个应用程序。我试图制作三个按钮,它们通过 webview 帮助 link 三个 HTML 页面。但是,有一个问题是我无法添加共享首选项来保存单击的按钮。如果我重新进入该应用程序,则不会保存更改。 这是我的主要 Activity:
package com.example.myapp;
import androidx.appcompat.app.AlertDialog;
import androidx.appcompat.app.AppCompatActivity;
import androidx.appcompat.widget.AppCompatRadioButton;
import android.content.Context;
import android.content.DialogInterface;
import android.content.Intent;
import android.graphics.Color;
import android.os.Build;
import android.os.Bundle;
import android.os.Handler;
import android.os.StrictMode;
import android.text.method.LinkMovementMethod;
import android.util.Log;
import android.view.Display;
import android.view.View;
import android.view.WindowManager;
import android.webkit.WebSettings;
import android.webkit.WebView;
import android.webkit.WebViewClient;
import android.widget.RadioGroup;
import android.widget.TextView;
import android.widget.Toast;
public class MainActivity extends AppCompatActivity {
WebView view;
AppCompatRadioButton rbLeft, rbRight, rbCenter;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
rbLeft = findViewById(R.id.rbLeft);
rbRight = findViewById(R.id.rbRight);
rbCenter = findViewById(R.id.rbCenter);
StrictMode.VmPolicy.Builder builder = new StrictMode.VmPolicy.Builder();
StrictMode.setVmPolicy(builder.build());
view = (WebView) this.findViewById(R.id.webView);
view.getSettings().setJavaScriptEnabled(true);
view.getSettings().setLoadsImagesAutomatically(true);
view.setScrollBarStyle(View.SCROLLBARS_INSIDE_OVERLAY);
view.loadUrl("file:///android_asset/index1.html");
}
private class MyBrowser extends WebViewClient implements com.example.myapp.MyBrowser {
@Override
public boolean shouldOverrideurlLoading(WebView view, String url){
view.loadUrl(url);
return true;
}
}
public void onRadioButtonClicked(View views){
boolean isSelected = ((AppCompatRadioButton)views).isChecked();
switch (views.getId()){
case R.id.rbLeft:
if (isSelected){
rbLeft.setTextColor(Color.WHITE);
rbRight.setTextColor(Color.RED);
rbCenter.setTextColor(Color.RED);
view.loadUrl("file:///android_asset/index1.html");
}
break;
case R.id.rbCenter:
if (isSelected){
rbLeft.setTextColor(Color.RED);
rbRight.setTextColor(Color.RED);
rbCenter.setTextColor(Color.WHITE);
view.loadUrl("file:///android_asset/info.html");
}
break;
case R.id.rbRight:
if (isSelected){
rbLeft.setTextColor(Color.RED);
rbRight.setTextColor(Color.WHITE);
rbCenter.setTextColor(Color.RED);
view.loadUrl("file:///android_asset/qollanma.html");
}
break;
}
}
boolean doubleBackToExitPressedOnce;
@Override
public void onBackPressed() {
if (doubleBackToExitPressedOnce) {
new AlertDialog.Builder(this)
.setTitle("Halal Check")
.setMessage("Dasturdan chiqmoqchimisiz?")
.setPositiveButton("Ha",
new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog,
int which) {
finish();
}
}).setNegativeButton("Yo'q", null).show();
return;
} else {
if (view.canGoBack()) {
view.goBack();
} else {
}
}
this.doubleBackToExitPressedOnce = true;
if (getApplicationContext() == null) {
return;
} else {
Toast.makeText(this, "Iltimos, Dasturdan chiqish uchun yana bir marta bosing!",
Toast.LENGTH_SHORT).show();
}
new Handler().postDelayed(new Runnable() {
@Override
public void run() {
doubleBackToExitPressedOnce = false;
}
}, 2000);
}
}
拜托,如果有人知道这件事,请帮助我! 如果可能的话,请展示它在我的代码中的表现。 感谢您的关注!
如果我对你的目标的理解是正确的,这就是你实现目标的方式。
- 选择单选按钮后,应用会将选择的单选按钮保存到 SharedPreferences。
- 下次加载应用程序时,它将检查 SharedPreferences 值并加载适当的 HTML 文件。
因此,在您的 onRadioButtonClicked()
上,您可以添加以下代码来保存按下的单选按钮:
public void onRadioButtonClicked(View views){
boolean isSelected = ((AppCompatRadioButton) views).isChecked();
SharedPreferences sharedPref = getSharedPreferences("omg", Context.MODE_PRIVATE);
SharedPreferences.Editor editor = sharedPref.edit();
switch (views.getId()){
case R.id.rbLeft:
if (isSelected){
rbLeft.setTextColor(Color.WHITE);
rbRight.setTextColor(Color.RED);
rbCenter.setTextColor(Color.RED);
view.loadUrl("file:///android_asset/index1.html");
editor.putString("last_button", "rbLeft");
editor.apply();
}
break;
case R.id.rbCenter:
if (isSelected){
rbLeft.setTextColor(Color.RED);
rbRight.setTextColor(Color.RED);
rbCenter.setTextColor(Color.WHITE);
view.loadUrl("file:///android_asset/info.html");
editor.putString("last_button", "rbCenter");
editor.apply();
}
break;
case R.id.rbRight:
if (isSelected){
rbLeft.setTextColor(Color.RED);
rbRight.setTextColor(Color.WHITE);
rbCenter.setTextColor(Color.RED);
view.loadUrl("file:///android_asset/qollanma.html");
editor.putString("last_button", "rbRight");
editor.apply();
}
break;
}
}
此代码将生成(如果没有匹配的 SharedPreference)或保存(如果有匹配的 SharedPreference)一个名为 "omg" 的 SharedPreference,并放置一个值单选按钮名称和键名称 "last_button"在您的设备存储中像这样:
└ data\data\com.example.package\shared_prefs
- omg.xml
└ data\data\com.example.package\shared_prefs\omg.xml
...
<string name="last_button">rbLeft</string>
...
因此,最后一件事是在加载应用程序时加载 SharedPreference 值。在你的 onCreate()
:
...
view.getSettings().setSomeSettings();
view.setScrollBarStyle(Blabla);
SharedPreferences sharedPref = getSharedPreferences("omg", Context.MODE_PRIVATE)
switch (sharedPref.getString("last_button", "This will be the value when there was no matching key.") {
case "rbLeft":
rbLeft.setChecked(true);
view.loadUrl("file:///android_asset/index1.html");
break;
case "rbCenter":
rbCenter.setChecked(true);
view.loadUrl("file:///android_asset/info.html");
break;
case "rbRight":
rbRight.setChecked(true);
view.loadUrl("file:///android_asset/qollanma.html");
break;
case "This will be the value when there was no matching key.":
throw IllegalStateException("There was no matching key in omg SharedPreference.");
break;
}