自定义EditTextPreference中的图像不会更改

时间:2017-12-09 10:39:34

标签: android layout sharedpreferences

Hello我创建了PreferenceActivity类,它从R.xml.preferences加载所有首选项,并在列表R.layout.preference_list(仅包含列表的最简单布局)中显示它们。

事情是偏好之一使用特定布局,如

    <EditTextPreference
        android:title="@string/auth_title"
        android:summary="@string/auth_summary"
        android:key="pass"
        android:defaultValue="1"
        android:layout="@layout/preference_auth"
        android:hint="Enter password"/>

@layout/preference_auth布局中的关键属性为

<ImageView
    android:id="@+id/iconSelected"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:paddingTop="5dp"
    android:paddingLeft="10dp"
    android:layout_alignParentRight="true"
    android:src="@drawable/ic_action_no" />

它描述了右侧的图标。左侧是可单击的首选项,它打开EditText区域。

enter image description here

现在我想以编程方式更改EditText与特定字符串匹配时屏幕上显示的图像src。

我有PreferenceActivity类

public class Settings extends PreferenceActivity {

 private EditTextPreference editPref;
 private ImageView icon;

            @Override
            protected void onCreate(Bundle savedInstanceState) 
            {
                super.onCreate(savedInstanceState);

                addPreferencesFromResource(R.xml.preferences);
                setContentView(R.layout.preference_list);

                editPref = (EditTextPreference) getPreferenceScreen().findPreference("pass");

                icon = (ImageView)getLayoutInflater().inflate(editPref.getLayoutResource(), null).findViewById(R.id.iconSelected);
                icon.setImageResource(R.drawable.ic_action_yes);

            }
}

这段代码不起作用。图像似乎完好无损。问题在哪里?

1 个答案:

答案 0 :(得分:0)

经过长时间的研究,我找到了答案。此首选项活动仅负责显示负责该操作的另一个类中已经配置的视图。所以我剪了一些这样的代码

public class Settings extends PreferenceActivity {

   private ImageView icon;

   @Override
   protected void onCreate(Bundle savedInstanceState) {
      super.onCreate(savedInstanceState);

       addPreferencesFromResource(R.xml.preferences);
       setContentView(R.layout.preference_list);
   }

}

其中R.xml.preferences包含我的自定义EditTextPreference。当我们扩展此类时,我们需要重写onBindView()方法,该方法设置了我在本主题中想要实现的示例功能的行为。最终看起来像这样

public class AuthPreference extends EditTextPreference {
        private ImageView icon;
        private boolean change;

        ...

        @Override
        protected void onBindView(View view) {
            super.onBindView(view);
            icon = (ImageView) view.findViewById(R.id.iconSelected);
            if(change) icon.setImageResource(R.drawable.ic_action_yes);
            else icon.setImageResource(R.drawable.ic_action_no);
        }
}

其中图标src由getSharedPreferences().getString()控制。现在可以正常工作了。