1

このコードをオンラインで入手したので、変更を加えたいと考えています。基本的に、[共有設定を表示] をクリックして [設定画面] をクリックし、変更を加えてから [戻る] をクリックすると、[共有設定を表示] ボタンを再度クリックするまで、表示された設定は更新されません。設定を自動的に更新するにはどうすればよいですか? リスナーは必要ですか?

PreferenceDemoTestActivity.java

package Preference.Demo;

import android.app.Activity;
import android.content.Intent;
import android.content.SharedPreferences;
import android.os.Bundle;
import android.preference.PreferenceManager;
import android.view.View;
import android.widget.Button;
import android.widget.TextView;

public class PreferenceDemoTestActivity extends Activity {
TextView textView;

@Override
public void onCreate(Bundle savedInstanceState) {
   super.onCreate(savedInstanceState);
   setContentView(R.layout.main);

   Button btnPrefs = (Button) findViewById(R.id.btnPrefs);
   Button btnGetPrefs = (Button) findViewById(R.id.btnGetPreferences);

   textView = (TextView) findViewById(R.id.txtPrefs);

   View.OnClickListener listener = new View.OnClickListener() {

   @Override
   public void onClick(View v) {
   switch (v.getId()) {
   case R.id.btnPrefs:
      Intent intent = new Intent(PreferenceDemoTestActivity.this,
          PrefsActivity.class);
      startActivity(intent);
      break;

   case R.id.btnGetPreferences:
      displaySharedPreferences();
      break;

   default:
     break;
   }
   }
   };

   btnPrefs.setOnClickListener(listener);
   btnGetPrefs.setOnClickListener(listener);
}

private void displaySharedPreferences() {
   SharedPreferences prefs = PreferenceManager
    .getDefaultSharedPreferences(PreferenceDemoTestActivity.this);

   String username = prefs.getString("username", "Default NickName");
   String passw = prefs.getString("password", "Default Password");
   boolean checkBox = prefs.getBoolean("checkBox", false);
   String listPrefs = prefs.getString("listpref", "Default list prefs");

   StringBuilder builder = new StringBuilder();
   builder.append("Username: " + username + "\n");
   builder.append("Password: " + passw + "\n");
   builder.append("Keep me logged in: " + String.valueOf(checkBox) + "\n");
   builder.append("List preference: " + listPrefs);

   textView.setText(builder.toString());
}
}

PrefsActivity.java

package Preference.Demo;


import android.os.Bundle;
import android.preference.PreferenceActivity;


public class PrefsActivity extends PreferenceActivity{

@Override
protected void onCreate(Bundle savedInstanceState) {
   super.onCreate(savedInstanceState);
   addPreferencesFromResource(R.xml.prefs);
}
}

main.xml

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
  android:layout_width="fill_parent"
  android:layout_height="fill_parent"
  android:orientation="vertical" >

<Button
  android:id="@+id/btnPrefs"
  android:layout_width="wrap_content"
  android:layout_height="wrap_content"
  android:text="Preferences Screen" />

<Button
  android:id="@+id/btnGetPreferences"
  android:layout_width="wrap_content"
  android:layout_height="wrap_content"
  android:text="Display Shared Preferences" />

<TextView
  android:id="@+id/txtPrefs"
  android:layout_width="wrap_content"
  android:layout_height="wrap_content" />

</LinearLayout>
4

2 に答える 2

1

SharedPreferencesアクティビティのメソッドの値で変数を単純に更新してからonResume()、UI を更新します。

設定画面で値を更新しても、アクティビティ ハンドは単純に古いインスタンスを再開し、変数に保存されている値を使用していたため、値は変更されませんでした。

あなたの場合、からの単純な呼び出しdisplaySharedPreferences()onResume()十分です。

于 2012-11-17T14:55:19.327 に答える
0

onCreate()メソッドの変更を登録できます。

getPreferenceScreen().getSharedPreferences().registerOnSharedPreferenceChangeListener(this);

そして、次を使用します。

public void onSharedPreferenceChanged(SharedPreferences sharedPreferences, String key) {
SharedPreferences.Editor editor = sharedPreferences.edit();
// Update your preferences here 

}

次に、で登録を解除することを忘れないでくださいonDestroy():

getPreferenceScreen().getSharedPreferences().unregisterOnSharedPreferenceChangeListener(this);
于 2012-11-17T15:00:32.060 に答える