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区域。
现在我想以编程方式更改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);
}
}
这段代码不起作用。图像似乎完好无损。问题在哪里?
答案 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()
控制。现在可以正常工作了。