自定义 Android Preference——SpinnerPreference的私人定制
16lz
2021-01-23
因客户需求SpinnerPreference,网上各种搜索不到,无奈只能重写组件,现将过程分享大家。
自定义SpinnerPreference
一:首先从扩展preference开始:类文件必须继承自Preference并实现构造函数,如下
public MySpinnerPreference(Context context) { super(context); } public MySpinnerPreference(Context context, AttributeSet attrs) { super(context, attrs); } public MySpinnerPreference(Context context, AttributeSet attrs, int defStyle) { super(context, attrs, defStyle); }
二:自定义布局文件的重写
<?xml version="1.0" encoding="utf-8"?>
三:引用一个layout文件为其指定UI,可以通过实现如下两个回调函数:
@Override protected View onCreateView(ViewGroup parent) { // TODO Auto-generated method stub return super.onCreateView(parent); } @Override protected void onBindView(View view) { super.onBindView(view); mSpinner = (Spinner) view.findViewById(R.id.spinner1); String[] arraystr = view.getResources().getStringArray(R.array.itemspinner_values); mAdapter = new ArrayAdapter(view.getContext(), android.R.layout.simple_spinner_dropdown_item, arraystr); // 也可一自己定义适配器的样式 // mAdapter = new ArrayAdapter(view.getContext(), R.layout.preference_categoary, mMeausStr); mSpinner.setAdapter(mAdapter); mSpinner.setOnItemSelectedListener(this); }
四:为组建添加需要的事件这里implementsOnItemSelectedListener
@Override public void onItemSelected(AdapterView<?> parent, View view, int position, long id) { if (callChangeListener(position)) { setValue(position); } } @Override public void onNothingSelected(AdapterView<?> parent) { }
五:保存或持久化我们的改动
設置我們的改動
public void setValue(int value) { // Always persist/notify the first time. final boolean changed = !TextUtils.equals(Integer.toString(mValue), Integer.toString(value)); if (changed || !mValueSet) { mValue = value; mValueSet = true; persistInt(value); if (changed) { notifyChanged(); } } } @Override public void onItemSelected(AdapterView<?> parent, View view, int position, long id) { mPos = position; if (callChangeListener(position)) { setValue(position); } }
可以持久化多种基本数据类型
@Override protected void onSetInitialValue(boolean restoreValue, Object defaultValue) { setValue(restoreValue ? getPersistedInt(mValue) : (Integer) defaultValue); }
六效果圖
更多相关文章
- android 向serverGet和Post请求的两种方式,android向server发送
- android使用webview加载flash文件
- 修改Android中strings.xml文件
- Android获取sd卡上的文件目录-日记
- PC上安装android market软件并提取apk文件
- 通过终端命令生成并在手机上运行dex文件