经过 20 分钟的拉扯头发后,我找到了解决这个问题的优雅方法。首先,扩展首选项,然后重写 getView(View ConvertView, ViewGroupparent) 方法。我的情况是这样的:我有一个带有应用程序图标和 2 个文本视图(应用程序名称和版本)的首选项布局。我想以编程方式更改应用程序版本。我该怎么做呢?看看下面:
public class AboutUsPreference extends Preference {
public AboutUsPreference(Context context) {
super(context);
}
public AboutUsPreference(Context context, AttributeSet attrs) {
super(context, attrs);
}
public AboutUsPreference(Context context, AttributeSet attrs, int defStyle) {
super(context, attrs, defStyle);
}
@Override
public View getView(View convertView, ViewGroup parent) {
View v = super.getView(convertView, parent);
((TextView)v.findViewById(R.id.textView2)).setText(getAppVersion());
return v;
}
private String getAppVersion(){
PackageInfo pInfo = null;
try {
pInfo = getContext().getPackageManager().getPackageInfo(getContext().getPackageName(), 0);
} catch (NameNotFoundException e) {
Log.e(getClass().getName(), e.getMessage(), e);
return "";
}
String version = pInfo.versionName;
return getContext().getString(R.string.version, version);
}
}
解决方案是这样的:View v = super.getView(convertView, parent);
当重写 getView 方法时。 super.getview 调用将返回您的布局视图。
我的 xml 首选项如下所示:
<com.audioRec.android.settings.aboutUs.AboutUsPreference
android:layout="@layout/about_preference_layout"/>