public class Preference implements Comparable<Preference> {
* 存储数据的DataStore对象,如果为空时使用PreferenceManager#getPreferenceDataStore获取,
* 如果该方法也返回null,则表示使用SharedPreferences来存储值。
*/
@Nullable
private PreferenceDataStore mPreferenceDataStore;
* Gets the View that will be shown in the {@link PreferenceActivity}.
*/
public View getView(View convertView, ViewGroup parent) {
if (convertView == null) {
convertView = onCreateView(parent);
}
onBindView(convertView);
return convertView;
}
* 创建UI布局,默认会根据mLayoutResId去从xml中加载布局。
*/
@CallSuper
protected View onCreateView(ViewGroup parent) {
final LayoutInflater layoutInflater =
(LayoutInflater) mContext.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
final View layout = layoutInflater.inflate(mLayoutResId, parent, false);
final ViewGroup widgetFrame = (ViewGroup) layout
.findViewById(com.android.internal.R.id.widget_frame);
if (widgetFrame != null) {
if (mWidgetLayoutResId != 0) {
layoutInflater.inflate(mWidgetLayoutResId, widgetFrame);
} else {
widgetFrame.setVisibility(View.GONE);
}
}
return layout;
}
* 绑定View和数据,
*/
@CallSuper
protected void onBindView(View view) {
final TextView titleView = view.findViewById(com.android.internal.R.id.title);
if (titleView != null) {
final CharSequence title = getTitle();
if (!TextUtils.isEmpty(title)) {
titleView.setText(title);
titleView.setVisibility(View.VISIBLE);
if (mHasSingleLineTitleAttr) {
titleView.setSingleLine(mSingleLineTitle);
}
} else {
titleView.setVisibility(View.GONE);
}
}
final TextView summaryView = (TextView) view.findViewById(
com.android.internal.R.id.summary);
if (summaryView != null) {
final CharSequence summary = getSummary();
if (!TextUtils.isEmpty(summary)) {
summaryView.setText(summary);
summaryView.setVisibility(View.VISIBLE);
} else {
summaryView.setVisibility(View.GONE);
}
}
final ImageView imageView = view.findViewById(com.android.internal.R.id.icon);
if (imageView != null) {
if (mIconResId != 0 || mIcon != null) {
if (mIcon == null) {
mIcon = getContext().getDrawable(mIconResId);
}
if (mIcon != null) {
imageView.setImageDrawable(mIcon);
}
}
if (mIcon != null) {
imageView.setVisibility(View.VISIBLE);
} else {
imageView.setVisibility(mIconSpaceReserved ? View.INVISIBLE : View.GONE);
}
}
if (mShouldDisableView) {
setEnabledStateOnViews(view, isEnabled());
}
}
public void setOrder(int order) {
if (order != mOrder) {
mOrder = order;
notifyHierarchyChanged();
}
}
* 点击事件,它会保存值到SharedPreferences,子类覆写该方法调用callChangeListener(Object)
* 来确保客户端想要更新preference中的值为newValue。
*/
protected void onClick() {
}
* 用户点击View后调用这个方法,此时value并未改变,客户端可以放弃掉此次修改值。
* @return True 如果客户端想保存这个值,则返回true。
*/
protected boolean callChangeListener(Object newValue) {
return mOnChangeListener == null || mOnChangeListener.onPreferenceChange(this, newValue);
}
public void performClick(PreferenceScreen preferenceScreen) {
if (!isEnabled()) {
return;
}
onClick();
if (mOnClickListener != null && mOnClickListener.onPreferenceClick(this)) {
return;
}
PreferenceManager preferenceManager = getPreferenceManager();
if (preferenceManager != null) {
PreferenceManager.OnPreferenceTreeClickListener listener = preferenceManager
.getOnPreferenceTreeClickListener();
if (preferenceScreen != null && listener != null
&& listener.onPreferenceTreeClick(preferenceScreen, this)) {
return;
}
}
if (mIntent != null) {
Context context = getContext();
context.startActivity(mIntent);
}
}
* 根据Order进行排序,如果未指定Order,则根据Title进行排序。
*/
@Override
public int compareTo(Preference another) {
if (mOrder != another.mOrder) {
return mOrder - another.mOrder;
} else if (mTitle == another.mTitle) {
return 0;
} else if (mTitle == null) {
return 1;
} else if (another.mTitle == null) {
return -1;
} else {
return CharSequences.compareToIgnoreCase(mTitle, another.mTitle);
}
}
}