怎么在preferencefragment显示自定义导航栏
2016-01-19
展开全部
关于自定义Preference内置控件及PreferenceFragment笔记,有需要的朋友可以参考下。
我们知道系统Preference提供的控件并不多,只有CheckBoxPreference,ListPreference,EditTextPreference,RingtonePreference等为数不多的控件,有时候并不能满足我们的需求.这时候我们就需要自定义,比如自定义一个SeekBar用来调节音量什么的.这里我就不介绍如何自定义包含SeekBar的Preference,大家可以查看Android自定义SeekBarPreference.
这里需要提及的是,我们自定的这个控件,往往需要和Activity或者Service通信,这时候该怎么操作呢?
我们同样还是以SeekBarPreference为例.我们都知道,当滑动SeekBar的时候,系统会回调onProgressChanged方法.假如我们需要在onProgressChanged中与
Activity/Fragment/Service通信.这时候就需要定义一个接口在其中声明我们需要用到的方法.然后声明一个函数,将接口的引用作为参数提供给Activity/Fragment/
Service调用.
public class VolumeSeekBarPreferences extends DialogPreference implements OnSeekBarChangeListener {
private seekBarCallBack back;
....
@Override
public void onProgressChanged(SeekBar seekBar, int progress,
boolean fromUser) {
// TODO Auto-generated method stub
....
back.setSeekBarVolume(mCurrentValue);
....
}
....
public interface seekBarCallBack{
public void setSeekBarVolume(int volume);
}
public void setSeekbarListener(seekBarCallBack barCallBack){
back = barCallBack;
}
}
然后,在Activity/Fragment/Service中通过实现控件Preference中的传递接口引用的函数.
public class MyPreferenceFragment extends PreferenceFragment implements
OnPreferenceClickListener, OnPreferenceChangeListener {
private VolumeSeekBarPreferences seekBarPreferences;
.....
@Override
public void onCreate(Bundle savedInstanceState) {
// TODO Auto-generated method stub
super.onCreate(savedInstanceState);
addPreferencesFromResource(R.layout.preference_setting);
//VolumeSeekBarPreferences为我们自定义的Preference控件
seekBarPreferences = (VolumeSeekBarPreferences) findPreference("seekBarPreference");
seekBarPreferences.setSeekbarListener(new seekBarCallBack() {
@Override
public void setSeekBarVolume(int volume) {
// TODO Auto-generated method stub
//在这里实现通信
}
});
}
.....
}
我们知道系统Preference提供的控件并不多,只有CheckBoxPreference,ListPreference,EditTextPreference,RingtonePreference等为数不多的控件,有时候并不能满足我们的需求.这时候我们就需要自定义,比如自定义一个SeekBar用来调节音量什么的.这里我就不介绍如何自定义包含SeekBar的Preference,大家可以查看Android自定义SeekBarPreference.
这里需要提及的是,我们自定的这个控件,往往需要和Activity或者Service通信,这时候该怎么操作呢?
我们同样还是以SeekBarPreference为例.我们都知道,当滑动SeekBar的时候,系统会回调onProgressChanged方法.假如我们需要在onProgressChanged中与
Activity/Fragment/Service通信.这时候就需要定义一个接口在其中声明我们需要用到的方法.然后声明一个函数,将接口的引用作为参数提供给Activity/Fragment/
Service调用.
public class VolumeSeekBarPreferences extends DialogPreference implements OnSeekBarChangeListener {
private seekBarCallBack back;
....
@Override
public void onProgressChanged(SeekBar seekBar, int progress,
boolean fromUser) {
// TODO Auto-generated method stub
....
back.setSeekBarVolume(mCurrentValue);
....
}
....
public interface seekBarCallBack{
public void setSeekBarVolume(int volume);
}
public void setSeekbarListener(seekBarCallBack barCallBack){
back = barCallBack;
}
}
然后,在Activity/Fragment/Service中通过实现控件Preference中的传递接口引用的函数.
public class MyPreferenceFragment extends PreferenceFragment implements
OnPreferenceClickListener, OnPreferenceChangeListener {
private VolumeSeekBarPreferences seekBarPreferences;
.....
@Override
public void onCreate(Bundle savedInstanceState) {
// TODO Auto-generated method stub
super.onCreate(savedInstanceState);
addPreferencesFromResource(R.layout.preference_setting);
//VolumeSeekBarPreferences为我们自定义的Preference控件
seekBarPreferences = (VolumeSeekBarPreferences) findPreference("seekBarPreference");
seekBarPreferences.setSeekbarListener(new seekBarCallBack() {
@Override
public void setSeekBarVolume(int volume) {
// TODO Auto-generated method stub
//在这里实现通信
}
});
}
.....
}
微测检测5.10
2023-05-10 广告
2023-05-10 广告
您好!建议咨 深圳市微测检测有限公司,已建立起十余个专业实验室,企业通过微测检测就可以获得一站式的测试与认 证解决方案;(EMC、RF、MFi、BQB、QI、USB、安全、锂电池、快充、汽车电子EMC、汽车手机互 联、语音通话质量),认证遇...
点击进入详情页
本回答由微测检测5.10提供
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询