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)