Android 如何在seekbar onSaveInstance状态下保存选择
背景: 我正在使用如图所示 我正在尝试做的事情:Android 如何在seekbar onSaveInstance状态下保存选择,android,android-seekbar,Android,Android Seekbar,背景: 我正在使用如图所示 我正在尝试做的事情: 我正在双端搜索栏中设置值 在方向更改时,我希望存储选择并加载数据 借助于onSaveInstanceState 我怎样才能做到这一点 FrgMdFilter.java public class FrgMdFilter extends Fragment { //Declaring View Objects references private Button btnFilterList; private Spinner
- 我正在双端搜索栏中设置值
- 在方向更改时,我希望存储选择并加载数据
借助于
onSaveInstanceState
- 我怎样才能做到这一点
FrgMdFilter.java
public class FrgMdFilter extends Fragment {
//Declaring View Objects references
private Button btnFilterList;
private Spinner spinViewBy;
private TextView txtMinPrice,txtMaxPrice,txtMinDistance,txtMaxDistance,txtMinRating,txtMaxRating;
private CheckBox chkPrice,chkDistance,chkRating;
//Declaring Objects Declaration references
private ArrayList<HashMap<String, String>> objListBufType=null;
private FragmentTransaction ft;
private Fragment objFragment=null;
private static String errMsg=null;
private static boolean isErr=false;
//Constructor declaration on type newInstance
public static FrgMdFilter newInstance() {
FrgMdFilter fragment = new FrgMdFilter();
return fragment;
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
View view=inflater.inflate(R.layout.frg_md_filter, container, false);
try {
//For using actionbar menu from fragment
setHasOptionsMenu(true);
//For retaining fragment on configuration changes
setRetainInstance(true);
//Set the Application Variable to track Which class is currently loaded to the container
AppController.CURRENT_FRAGMENT=FrgMdFilter.class.getSimpleName();
//Set the title and sub-title for mobiles having API>=11
if (android.os.Build.VERSION.SDK_INT >= 11) {
//Set the title and sub-title for the actionbar
ActionBar ab = getActivity().getActionBar();
ab.setTitle(getResources().getString(R.string.app_name));
ab.setSubtitle(getResources().getString(R.string.FrgMdFilterScreenName));
}
objListBufType=new ArrayList<HashMap<String, String>>();
} catch (Exception e) {
if(isErr==false){
errMsg=e.toString();
isErr=true;
//Pop the dialog
DlgUniversalError.showQuitAlert(getActivity(),errMsg);
}
}
return view;
}
@Override
public void onStart() {
super.onStart();
try {
int minOnlinePrice=Integer.valueOf(txtMinPrice.getText().toString());
int maxOnlinePrice=Integer.valueOf(txtMaxPrice.getText().toString());
// create RangeSeekBar as Integer range between 20 and 75
UtilRangeSeekBar<Integer> seekBarPrice = new UtilRangeSeekBar<Integer>(minOnlinePrice, maxOnlinePrice, getActivity().getApplicationContext());
seekBarPrice.setOnRangeSeekBarChangeListener(new OnRangeSeekBarChangeListener<Integer>() {
@Override
public void onRangeSeekBarValuesChanged(UtilRangeSeekBar<?> bar, Integer minValue, Integer maxValue) {
// handle changed range values
txtMinPrice.setText(String.valueOf(minValue));
txtMaxPrice.setText(String.valueOf(maxValue));
if(chkPrice.isChecked()!=true){
chkPrice.setChecked(true);
}
}
});
ViewGroup layoutPrice = (ViewGroup) getActivity().findViewById(R.id.seekPriceBar);
layoutPrice.addView(seekBarPrice);
} catch (Exception e) {
if(isErr==false){
errMsg=e.toString();
isErr=true;
//Pop the dialog
DlgUniversalError.showQuitAlert(getActivity(),errMsg);
}
}
}
private void initializeSeekBar() throws Exception {
DatabaseHandler mHelper;
SQLiteDatabase db = null;
Cursor mCursor = null;
try {
mHelper = new DatabaseHandler(getActivity());
db = mHelper.getReadableDatabase();
mCursor = db.rawQuery("select Min(online_price),Max(online_price),Min(rating),Max(rating),Min(distance),Max(distance) " +"from "+ view_buffet.VIEW_NAME_VW_BUFFET, null);
if (mCursor.getCount()>0) {
//It is a necessary to move the cursor to the beginning every time we perform the cursor operation
mCursor.moveToFirst();
/* Math.floor:: Rounding to low value
* Math.ceil:: Rounding to high value*/
txtMinPrice.setText(String.valueOf(Integer.valueOf((int) Math.floor(Integer.valueOf(mCursor.getString(0))))));
txtMaxPrice.setText(String.valueOf(Integer.valueOf((int)
}
} catch (Exception e) {
if(isErr==false){
errMsg=e.toString();
isErr=true;
throw e;
}
}finally{
if(db!=null){
if(db.isOpen()) db.close();
}
if(mCursor!=null){
if(!mCursor.isClosed())mCursor.close();
}
}
}
@Override
public void onCreateOptionsMenu(
Menu menu, MenuInflater inflater) {
//Now inflate the menu items required
inflater.inflate(R.menu.screen_refresh, menu);
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
ft = getFragmentManager().beginTransaction();
switch(item.getItemId()) {
case R.id.screen_refresh:
//REFRESH THE FRAGMENT
getFragmentManager().beginTransaction().remove(objFragment).commit();
objFragment = FrgMdFilter.newInstance();
getFragmentManager().beginTransaction().add(R.id.content_frame, objFragment,"FrgMdFilter").commit();
return true;
}
return super.onOptionsItemSelected(item);
}
}
公共类FrgMdFilter扩展片段{
//声明视图对象引用
专用按钮btnFilterList;
私有微调器微调器;
私有文本视图txtMinPrice、txtMaxPrice、txtMinDistance、txtmindestance、txtmindrating、txtmindrating;
专用复选框chkPrice、chkDistance、chkRating;
//声明对象声明引用
private ArrayList objListBufType=null;
私人碎片交易;
私有片段objFragment=null;
私有静态字符串errMsg=null;
私有静态布尔ISER=false;
//newInstance类型上的构造函数声明
公共静态FrgMdFilter newInstance(){
FrgMdFilter fragment=新的FrgMdFilter();
返回片段;
}
@凌驾
创建视图上的公共视图(布局、充气机、视图组容器、,
Bundle savedInstanceState){
视图=充气机。充气(R.layout.frg\u md\u过滤器,容器,假);
试一试{
//用于使用片段中的actionbar菜单
设置选项菜单(真);
//用于在配置更改时保留片段
setRetainInstance(真);
//设置应用程序变量以跟踪当前加载到容器中的类
AppController.CURRENT_FRAGMENT=FrgMdFilter.class.getSimpleName();
//设置API>=11的手机的标题和子标题
如果(android.os.Build.VERSION.SDK_INT>=11){
//设置actionbar的标题和子标题
ActionBar ab=getActivity().getActionBar();
ab.setTitle(getResources().getString(R.string.app_name));
ab.setSubtitle(getResources().getString(R.string.FrgMdFilterScreenName));
}
objListBufType=newarraylist();
}捕获(例外e){
如果(ISER==false){
errMsg=e.toString();
ISER=真;
//弹出对话框
DlgUniversalError.showQuitAlert(getActivity(),errMsg);
}
}
返回视图;
}
@凌驾
public void onStart(){
super.onStart();
试一试{
int minOnlinePrice=Integer.valueOf(txtMinPrice.getText().toString());
int maxOnlinePrice=Integer.valueOf(txtMaxPrice.getText().toString());
//将RangeSekbar创建为介于20和75之间的整数范围
UtilRangeSeekBar seekbarice=新的UtilRangeSeekBar(minOnlinePrice、maxOnlinePrice、getActivity().getApplicationContext());
setonRangeSeekbarchaneListener(新的onRangeSeekbarchaneListener(){
@凌驾
public void onRangeSekbarValuesChanged(UTILRangeSekbar条、整数minValue、整数maxValue){
//处理更改的范围值
txtMinPrice.setText(String.valueOf(minValue));
txtMaxPrice.setText(String.valueOf(maxValue));
if(chkPrice.isChecked()!=true){
chkPrice.setChecked(真);
}
}
});
ViewGroup layoutPrice=(ViewGroup)getActivity().findViewById(R.id.seekPriceBar);
layoutPrice.addView(参见kbarprice);
}捕获(例外e){
如果(ISER==false){
errMsg=e.toString();
ISER=真;
//弹出对话框
DlgUniversalError.showQuitAlert(getActivity(),errMsg);
}
}
}
private void initializekbar()引发异常{
数据库处理程序mHelper;
SQLiteDatabase db=null;
游标mCursor=null;
试一试{
mHelper=newdatabasehandler(getActivity());
db=mHelper.getReadableDatabase();
mCursor=db.rawQuery(“从“+查看自助餐。查看自助餐名称\u大众自助餐,空)”中选择最小(在线价格)、最大(在线价格)、最小(评级)、最大(评级)、最小(距离)、最大(距离)”+;
如果(mCursor.getCount()>0){
//每次执行光标操作时,都必须将光标移到开头
mCursor.moveToFirst();
/*数学地板::四舍五入到低值
*Math.ceil::舍入到高值*/
txtMinPrice.setText(String.valueOf(Integer.valueOf((int)Math.floor(Integer.valueOf(mCursor.getString(0щщ))));
txtMaxPrice.setText(String.valueOf(Integer.valueOf)((int)
}
}捕获(例外e){
如果(ISER==false){
errMsg=e.toString();
ISER=真;
投掷e;
}
}最后{
如果(db!=null){
if(db.isOpen())db.close();
}
if(mCursor!=null){
如果(!mCursor.isClosed())mCursor.close();
}
}
}
@凌驾
创建选项菜单上的公共void(
菜单菜单,菜单(充气机){
//现在将所需菜单项充气
充气机。充气(右菜单。屏幕刷新,菜单);
}
@凌驾
公共布尔值onOptionsItemSelected(MenuItem项){
ft=getFragmentManager().beginTransaction();
开关(item.getItemId()){
案例R.id.screen\u刷新:
//刷新片段
getFragmentManager().beginTransaction().remove(objFragment.commit();
objFragment=FrgMdFilter.newInstance();
getFragmentManager().beginTransaction().add(R.id.content_框架,objFragme
@Override
protected void onSaveInstanceState(Bundle outState) {
outState.putInt("min", getSelectedMinValue());
outState.putInt("max", getSelectedMaxValue());
super.onSaveInstanceState(outState);
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
int min = savedInstanceState.getInt("min");
int max = savedInstanceState.getInt("max");
//place those value in some field of FrgMdFilter class and use
//them when RangeSeekBar is initialized
//use those methods: setSelectedMinValue(min) and setSelectedMinValue(max)
}
UtilRangeSeekBar<Integer> seekBarPrice = new UtilRangeSeekBar<Integer>(minOnlinePrice, maxOnlinePrice, getActivity().getApplicationContext());
seekBarPrice.setSelectedMinValue(min)
seekBarPrice.setSelectedMinValue(max)