疑问一:我有一个EditTextPreference让在应用程序缺省路径的用户类型。
如何管理新的值是在我使用preferencefragment待观察?
用户在首选项窗口中单击确定完成新的设置后,我想写的新路径作为标题下面的摘要。
我曾尝试已与onSharedPreferenceChanged经历,但没有奏效。 我不知道如何从这里用户文本在弹出的窗口进入编辑字段。
希望能找到一些帮助安德烈亚斯!
编辑:这是我用与鲁斯塔姆的建议修改了整个PreferenceFragment的源代码。 遗憾的是它不工作。
package com.example.wbsettings;
import android.content.SharedPreferences;
import android.os.Bundle;
import android.preference.EditTextPreference;
import android.preference.Preference;
import android.preference.PreferenceFragment;
public class PreferenceFrag extends PreferenceFragment
implements SharedPreferences.OnSharedPreferenceChangeListener{
public static final String KEYVAL = "startpath";
SharedPreferences sp;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
// Load the preferences from an XML resource
addPreferencesFromResource(R.xml.preferences);
EditTextPreference prefUrl = (EditTextPreference) findPreference(KEYVAL);
prefUrl.getEditText().setHint("default path");
//>> Here the app crashed when I debug it
------------------------------------
prefUrl.setSummary(sp.getString(KEYVAL, ""));
}//onCreate
public void onSharedPreferenceChanged(SharedPreferences sharedPreferences,String key) {
Preference pref = findPreference(key);
if (pref instanceof EditTextPreference) {
EditTextPreference etp = (EditTextPreference) pref;
pref.setSummary(etp.getText());
}
}//onSharedPreferenceChanged
}
凡与OnSharedPreferenceChangeListener注册喜好:我还你的榜样不明白? 我的意思是,截至目前我永远无法到达,因为飞机坠毁的onSharedPreferenceChanged程序。 但是,当我使语句的注释和应用程序正在运行,并完成了我从来没有停在我设定的onSharedPreferenceChanged过程中的断点。
另一个问题:什么是这里回答评论,如果答案变成了其它评论过长最好的做法是什么? 我试图打开一个答案我自己的问题。 但是,一个弹出告诉我,这不是事情应该是这样。 那么该怎么办?
问候安德烈亚斯!
您menu_setting.xml
:
<menu xmlns:android="http://schemas.android.com/apk/res/android" >
<item
android:id="@+id/menu_settings"
android:orderInCategory="100"
android:showAsAction="never"
android:title="@string/menu_settings"
android:icon="@android:drawable/ic_menu_preferences"/>
</menu>
您preference.xml
:
<?xml version="1.0" encoding="utf-8"?>
<PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android" >
<EditTextPreference
android:dialogTitle="Enter path"
android:key="prefPath"
android:summary=""
android:title="Path Setting" />
</PreferenceScreen>
您PreferenceFrag
应该是这样的:
import android.content.SharedPreferences;
import android.os.Bundle;
import android.preference.EditTextPreference;
import android.preference.Preference;
import android.preference.PreferenceFragment;
public class PreferenceFrag extends PreferenceFragment
implements SharedPreferences.OnSharedPreferenceChangeListener{
public static final String KEYVAL = "prefPath";
SharedPreferences sp;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
// Load the preferences from an XML resource
addPreferencesFromResource(R.xml.preference);
EditTextPreference prefPath = (EditTextPreference) findPreference(KEYVAL);
prefPath.getEditText().setHint("sdcard/path");
// Here the app crashed when I debug it
SharedPreferences sp = getPreferenceScreen().getSharedPreferences();
prefPath.setSummary(sp.getString(KEYVAL, ""));
}//onCreate
@Override
public void onResume() {
super.onResume();
// Set up a listener whenever a key changes
getPreferenceScreen().getSharedPreferences()
.registerOnSharedPreferenceChangeListener(this);
}
@Override
public void onPause() {
super.onPause();
// Unregister the listener whenever a key changes
getPreferenceScreen().getSharedPreferences()
.unregisterOnSharedPreferenceChangeListener(this);
}
public void onSharedPreferenceChanged(SharedPreferences sharedPreferences,String key) {
Preference pref = findPreference(key);
if (pref instanceof EditTextPreference) {
EditTextPreference etp = (EditTextPreference) pref;
pref.setSummary(etp.getText());
}
}//onSharedPreferenceChanged
}
您PreferenceActivity
:
import android.app.Activity;
import android.os.Bundle;
public class PreferenceActivity extends Activity {
@Override
protected void onCreate(Bundle savedInstanceState) {
// TODO Auto-generated method stub
super.onCreate(savedInstanceState);
getFragmentManager().beginTransaction().replace(android.R.id.content,
new PreferenceFrag()).commit();
}
}
您的MainActivity
:
import android.os.Bundle;
import android.preference.PreferenceManager;
import android.app.Activity;
import android.content.Intent;
import android.content.SharedPreferences;
import android.view.Menu;
import android.view.MenuItem;
import android.widget.TextView;
public class MainActivity extends Activity {
private TextView textview;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
textview=(TextView)findViewById(R.id.textview);
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
getMenuInflater().inflate(R.menu.menu_setting, menu);
return true;
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
switch (item.getItemId()) {
case R.id.menu_settings:
Intent i = new Intent(this, PreferenceActivity.class);
startActivity(i);
break;
}
return true;
}
}
最后AndroidManifest.xml
:
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.example.preferencetest"
android:versionCode="1"
android:versionName="1.0" >
<uses-sdk
android:minSdkVersion="8"
android:targetSdkVersion="18" />
<application
android:allowBackup="true"
android:icon="@drawable/ic_launcher"
android:label="@string/app_name"
android:theme="@style/AppTheme" >
<activity
android:name="com.example.preferencetest.MainActivity"
android:label="@string/app_name" >
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
<activity android:name="com.example.preferencetest.PreferenceActivity"/>
</application>
</manifest>