gpt4 book ai didi

android - 如何从首选项中获取摘要

转载 作者:行者123 更新时间:2023-11-29 14:48:50 30 4
gpt4 key购买 nike

一个问题:我有一个 EditTextPreference 让用户输入应用程序的默认路径。

我如何管理在我使用的 preferencefragment 中看到新值?

用户在首选项窗口中单击确定以完成新设置后,我想将新路径写为标题下方的摘要。

我已经尝试过使用 onSharedPreferenceChanged 但它没有用。我不知道如何从用户文本所在的弹出窗口访问编辑字段。

希望得到一些帮助安德烈亚斯!

编辑:这是我根据 Rustam 的建议使用和修改的整个 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>

关于android - 如何从首选项中获取摘要,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25865048/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com