您的位置首页百科知识

怎么在preferencefragment显示自定义导航栏

怎么在preferencefragment显示自定义导航栏

的有关信息介绍如下:

怎么在preferencefragment显示自定义导航栏

关于自定义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

//在这里实现通信

}

});

}

.....

}