既存の Preference の要素、ListPreference などの入力画面形式でなくて、
他の入力画面にする場合、PreferenceScreen を用意し、Intent actionで入力画面 Activity を
指定する方法がある。
画面は、このような例、
左にはアイコンもない、これをタップして次のように、任意の入力画面を起動、
OKをタップしたら、サマリに結果を反映
プリファレンスのXMLは、以下、
<?xml version="1.0" encoding="utf-8"?>
<PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android" android:title="Intent preference Sample">
<PreferenceScreen android:title="地域コード" android:key="areaCd">
<intent android:action="android.intent.action.VIEW"
android:targetPackage="org.sample"
android:targetClass="org.sample.preference.AreaInputActivity" />
</PreferenceScreen>
</PreferenceScreen>
この Intent が指定する画面Activity が以下、Button の onClick で、SharedPreferences.Editor を使って
入力結果を key="areaCd" に対してセットする。・・・commit() を忘れずに。
import android.app.Activity;
import android.content.SharedPreferences;
import android.os.Bundle;
import android.preference.PreferenceManager;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
/**
* AreaInputActivity.java
*/
public class AreaInputActivity extends Activity{
@Override
protected void onCreate(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setTitle("Intent preference Sample");
setContentView(R.layout.areainput);
final SharedPreferences preferences = PreferenceManager.getDefaultSharedPreferences(this);
final EditText area = (EditText)findViewById(R.id.areaEditText);
*1.setOnClickListener(new View.OnClickListener(){
@Override
public void onClick(View v){
SharedPreferences.Editor editor = preferences.edit();
editor.putString("areaCd",area.getText().toString());
editor.commit();
finish();
}
});
*2.setOnClickListener(new View.OnClickListener(){
@Override
public void onClick(View v){
finish();
}
});
}
}
PreferenceActivity の実装では、onResume で サマリに設定結果を表示させる。
import android.content.SharedPreferences;
import android.os.Bundle;
import android.preference.Preference;
import android.preference.PreferenceActivity;
import android.preference.PreferenceManager;
/**
* AreaPreferenceActivity.java
*/
public class AreaPreferenceActivity extends PreferenceActivity{
@Override
protected void onCreate(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
addPreferencesFromResource(R.xml.exprefernce);
}
@Override
protected void onResume(){
super.onResume();
SharedPreferences preferences = PreferenceManager.getDefaultSharedPreferences(this);
Preference areaCd = findPreference("areaCd");
areaCd.setSummary(preferences.getString("areaCd",""));
}
}
他の画面での参照は、通常どおり。
SharedPreferences sharedPref = PreferenceManager.getDefaultSharedPreferences(this);
String areacd = sharedPref.getString("areaCd",null);