返回片段时禁用调用方法

时间:2015-05-15 07:12:30

标签: android android-fragments

我在一个片段上有多个微调器。当我更改一个值时,我需要更改另一个的适配器值。(例如,如果在第一个微调器中我在第二个选择users,我需要获取first namelast name等。如果在首先我选择主题,我需要获得topic 1topic 2等等。我有方法setSpinner()以第一个值设置第二个微调器,这个工作。但问题是当我继续再次调用下一个片段并返回第一个片段setSpinner并重置第二个微调器。

我的部分代码是:

SharedPreferences pref;
SharedPreferences.Editor edt;
Integer PTypeInt,PKindInt;

public View onCreateView(LayoutInflater inflater,ViewGroup container,
                         Bundle savedInstanceState) {
    v = inflater.inflate(R.layout.finesvehicleinformation, container, false);

    pref = getActivity().getPreferences(0);  // I use shared preferences to know are value of spinner changed
    edt = pref.edit();
    PTypeInt = pref.getInt("PType_spinner", -1);
    PType_spinner  = (Spinner) v.findViewById(R.id.spPType);
    // i wold not write set of adapter etc because this all work
    PType_spinner.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {
        public void onItemSelected(AdapterView<?> adapterView, View view, int i, long l) {
             if (PTypeInt == -1) {    //Here something is not right because PTypeInt is always -1
                 setSpinner(2, separated[0], "", "", v);
             }               
         }
         public void onNothingSelected(AdapterView<?> adapterView) {
         }
    });
 return v;
}

public void onViewCreated (View view, Bundle savedInstanceState){
   PKindInt=-1;  // set on -1 that I can select new value from spinner when I need        
}

@Override
public void onPause() {
    super.onPause();  // Always call the superclass method first
    edt.putInt("PType_spinner", PType_spinner.getSelectedItemPosition()).commit();
    edt.putInt("PKind_spinner", PKind_spinner.getSelectedItemPosition()).commit();
}

当我在第一帧使用时,一切正常,当我转到下一个,并且在第一次我获得PkindInt的价值时,但是当我在PKind_spinner.setOnItemSelectedListener中检查它时总是-1

当我从微调器中手动选择值时,我需要调用setSpinner,但是当我再次调用片段时则不需要。片段在FrameLayout中。我叫它

        currentFragment = myfragment[fNo];//fNo is number of fragment

        FragmentManager fm = getFragmentManager();
        FragmentTransaction fragmentTransaction = fm.beginTransaction();
        fragmentTransaction.replace(R.id.fragment_switch, currentFragment);
        fragmentTransaction.commit();

请帮忙。

1 个答案:

答案 0 :(得分:0)

我创建了带有两个微调器的测试项目,其中第二个微调器依赖于第一个微调器,以及用其他元件替换此片段的按钮,您可以在其中看到旋转器的选择。 Second Fragment有后退按钮 - 当它按下时,用户返回第一个片段并保留先前的选择。此外,当应用程序再次启动时,选择也恢复到之前的选择。

full project zipped sample

主要选择和状态保存/恢复如下:

pw.close();