【问题标题】:Dynamically change android:title in preference动态更改 android:title 偏好
【发布时间】:2016-02-01 14:09:12
【问题描述】:

所以我试图动态更改设置部分的某些首选项的 android:title,但是我的应用程序在使用 .setText .setTitle 等时不断崩溃......

我试过这个Dynamically add EditTextPreferenceIs possible to change the summary of EditTextPreference dynamically in Android? 但没用

这里是代码

public class SettingsFragment extends PreferenceFragment {


    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        EditTextPreference[] myTextView = new EditTextPreference[10];
        myTextView[1] = (EditTextPreference) findPreference("Index1");
        myTextView[1].setTitle("yo");
        // Load the preferences from an XML resource
        addPreferencesFromResource(R.xml.preferences);
    }
}

这就是偏好的片段

这里是 Preference.xml

<?xml version="1.0" encoding="utf-8"?>
<PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android">
<PreferenceCategory android:title="Apps Selector"/>
<EditTextPreference
    android:key="Index1"
    android:title="Blank"
    android:dialogTitle="Enter the App Package Name"
    android:defaultValue=""/>
 </PreferenceScreen>

这里是 logCat

02-01 15:55:28.918 3103-3103/? I/art: Not late-enabling -Xcheck:jni (already on)
02-01 15:55:28.959 3103-3103/com.firifire W/System: ClassLoader referenced unknown path: /data/app/com.firifire-1/lib/x86
02-01 15:55:29.039 3103-3103/com.firifire D/AndroidRuntime: Shutting down VM
02-01 15:55:29.040 3103-3103/com.firifire E/AndroidRuntime: FATAL EXCEPTION: main
                                                                                Process: com.firifire, PID: 3103
                                                                                java.lang.RuntimeException: Unable to start activity ComponentInfo{com.firifire/com.firifire.SettingsActivity}: java.lang.NullPointerException: Attempt to invoke virtual method 'void android.preference.EditTextPreference.setTitle(java.lang.CharSequence)' on a null object reference
                                                                                    at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2416)
                                                                                    at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2476)
                                                                                    at android.app.ActivityThread.-wrap11(ActivityThread.java)
                                                                                    at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1344)
                                                                                    at android.os.Handler.dispatchMessage(Handler.java:102)
                                                                                    at android.os.Looper.loop(Looper.java:148)
                                                                                    at android.app.ActivityThread.main(ActivityThread.java:5417)
                                                                                    at java.lang.reflect.Method.invoke(Native Method)
                                                                                    at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:726)
                                                                                    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:616)
                                                                                 Caused by: java.lang.NullPointerException: Attempt to invoke virtual method 'void android.preference.EditTextPreference.setTitle(java.lang.CharSequence)' on a null object reference
                                                                                    at com.firifire.SettingsFragment.onCreate(SettingsFragment.java:19)
                                                                                    at android.app.Fragment.performCreate(Fragment.java:2198)
                                                                                    at android.app.FragmentManagerImpl.moveToState(FragmentManager.java:942)
                                                                                    at android.app.FragmentManagerImpl.moveToState(FragmentManager.java:1148)
                                                                                    at android.app.BackStackRecord.run(BackStackRecord.java:793)
                                                                                    at android.app.FragmentManagerImpl.execPendingActions(FragmentManager.java:1535)
                                                                                    at android.app.FragmentController.execPendingActions(FragmentController.java:325)
                                                                                    at android.app.Activity.performStart(Activity.java:6252)
                                                                                    at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2379)
                                                                                    at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2476) 
                                                                                    at android.app.ActivityThread.-wrap11(ActivityThread.java) 
                                                                                    at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1344) 
                                                                                    at android.os.Handler.dispatchMessage(Handler.java:102) 
                                                                                    at android.os.Looper.loop(Looper.java:148) 
                                                                                    at android.app.ActivityThread.main(ActivityThread.java:5417) 
                                                                                    at java.lang.reflect.Method.invoke(Native Method) 
                                                                                    at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:726) 
                                                                                    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:616) 

我不认为问题出在 settingsActivity 因为我已经做了很多其他测试....但是由于 SettingsActivity 被提及...这是它的代码

public class SettingsActivity extends Activity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        // Display the fragment as the main content.
        getFragmentManager().beginTransaction()
                .replace(android.R.id.content, new SettingsFragment())
                .commit();
    }

    @Override
    protected void onPause(){
        super.onPause();
        finish();
    }
    @Override
    protected void onStop(){
        super.onStop();
        finish();
    }

    @Override
    protected void onDestroy() {
        super.onDestroy();
    }
}

【问题讨论】:

  • 发布你的崩溃日志请查看异常
  • @elefasGR 我已经添加了logcat
  • 如何在SettingsActivity 中填充mList?你确定它不是空的或空的吗?另外 SettingsActivity.java:32 行中的代码是什么?可以发一下吗?
  • @elefasGR 在它为空的情况下很好......基本上没有指纹。它应该跳过第一个 for 循环,然后开始下一个,所有键 ="Index" + i 应该有 title="Empty Index" + (i+1)
  • 我已经尝试过没有大部分代码的情况,只是尝试 myTextView = (EditTextPreference) findPreference("Index1"); myTextView.setTitle("Empty Index") 但仍然无济于事...问题可能出在 xml 中吗?

标签: android android-preferences preferencefragment


【解决方案1】:
public class SettingsFragment extends PreferenceFragment {


    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        // Load the preferences from an XML resource
        addPreferencesFromResource(R.xml.preferences);
        //Place after here
        EditTextPreference[] myTextView = new EditTextPreference[10];
        myTextView[1] = (EditTextPreference) findPreference("Index1");
        myTextView[1].setTitle("yo");
    }
}

【讨论】:

    【解决方案2】:

    myTextView[1] = (EditTextPreference) findPreference("Index1");

    这可能是错误的。设置myTextView[0] = (EditTextPreference) findPreference("Index1");(零索引而不是1)

    或更好地检查 null if((EditTextPreference) findPreference("Index1") != null) {..do your stuff here}

    【讨论】:

    • 感谢您的帮助......我能够通过在 addPreferencesFromResource(R.xml.preferences); 之后移动所有这些表达式来解决问题
    • 哦,是的,这就是 EditTextPreference 为空的原因!没看到。
    猜你喜欢
    • 1970-01-01
    • 2012-09-23
    • 2012-12-02
    • 2014-08-16
    • 1970-01-01
    • 2019-11-17
    • 2020-10-20
    • 1970-01-01
    • 2021-07-31
    相关资源
    最近更新 更多