2016-01-20 52 views
0

我有一个微调器,其中各种值更新TextView。例如,Spinner中的0(默认值)显示“ - min”,而12显示TextView中的“60分钟”。此微调器位于activity_main中TabLayout内部的片段内。我有一个PreferenceFragment(它在一个普通的Activity中,因为在使用FragmentActivity的时候我得到了工具条的重叠,这个Activity可以通过菜单调用),我可以将时间单位设置为几小时或几分钟。在我上面的例子中,设置是分钟。更改首选项后Android重新启动片段

当我将分钟更改为几小时时,我希望TextView在离开PreferenceFragment并返回主活动时更改为“ - hr”。这只适用于重新启动应用程序时,但我认为应该可以在不重新启动的情况下执行此操作。这是我的代码。

MyApplication.java

public class MyApplication extends Application { 
    @Override 
    public void onCreate() { 
     PreferenceManager.setDefaultValues(this, R.xml.user_settings, false); 

     super.onCreate(); 

     SharedPreferences settings = PreferenceManager.getDefaultSharedPreferences(this); 

     String time = settings.getString("TIME", ""); 
     if ("".equals(time)) { 
      settings.edit().putString("TIME", "2").commit(); 
     } else if ("1".equals(time)) { 
      settings.edit().putString("TIME", "1").commit(); 
     } else if ("2".equals(time)) { 
      settings.edit().putString("TIME", "2").commit(); 
     } 
    } 
} 

activity_settings.xml

<fragment 
    android:id="@+id/fragment_settings" 
    android:name="com.arjendejong.ovengevormdglas.SettingsFragment" 
    android:layout_width="fill_parent" 
    android:layout_height="fill_parent" 
    android:layout_below="@id/toolbar" /> 

user_settings.xml

<ListPreference 
    android:defaultValue="2" 
    android:entries="@array/time_unit" 
    android:entryValues="@array/listTimeValues" 
    android:key="time_unit" 
    android:title="@string/time_unit" /> 

SettingsFragment.java

public class SettingsFragment extends PreferenceFragment { 

    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 

     addPreferencesFromResource(R.xml.user_settings); 

     ListPreference timeUnitPref = (ListPreference) findPreference("time_unit"); 
     timeUnitPref.setSummary(timeUnitPref.getEntry()); 

     timeUnitPref.setOnPreferenceChangeListener(new Preference.OnPreferenceChangeListener() { 
      @Override 
      public boolean onPreferenceChange(Preference preference, Object o) { 
       preference.setSummary(o.toString()); 
       return true; 
      } 
     }); 

     ListPreference timeUnitPreference = (ListPreference) findPreference("time_unit"); 
     timeUnitPreference.setOnPreferenceChangeListener(timeUnitChangeListener); 
    } 

    Preference.OnPreferenceChangeListener timeUnitChangeListener = new Preference.OnPreferenceChangeListener() { 

     @Override 
     public boolean onPreferenceChange(Preference preference, Object newValue) { 

      ListPreference timeUnitPref = (ListPreference)findPreference("time_unit"); 
      switch (newValue.toString()) { 
       case "1": 
        PreferenceManager.getDefaultSharedPreferences(getActivity().getApplicationContext()).edit().putString("TIME", "1").commit(); 
        timeUnitPref.setSummary(timeUnitPref.getEntry()); 
        Toast.makeText(getActivity().getBaseContext(), "UREN", Toast.LENGTH_LONG).show(); 
        Log.d("DEBUG","UREN"); 
        timeUnitPref.setSummary(R.string.time_hours); 
        break; 
       case "2": 
        PreferenceManager.getDefaultSharedPreferences(getActivity().getApplicationContext()).edit().putString("TIME", "2").commit(); 
        timeUnitPref.setSummary(timeUnitPref.getEntry()); 
        Toast.makeText(getActivity().getBaseContext(), "MINUTEN", Toast.LENGTH_LONG).show(); 
        Log.d("DEBUG","MINUTEN"); 
        timeUnitPref.setSummary(R.string.time_minutes); 
        break; 
       /*default: 
        PreferenceManager.getDefaultSharedPreferences(getActivity().getApplicationContext()).edit().putString("TIME", "2").commit(); 
        timeUnitPref.setSummary(timeUnitPref.getEntry()); 
        Toast.makeText(getActivity().getBaseContext(), R.string.save_language_changes, Toast.LENGTH_LONG).show(); 
        timeUnitPref.setSummary(R.string.time_minutes); 
        break;*/ 
      } 
      return true; 
     } 
    }; 
} 

TabFragment

public class TabFragment2 extends Fragment { 

    TextView seekBarValue,iniCoolTimeValue, secCoolTimeValue, thirdCoolTimeValue; 
    Double sum; 
    private SharedPreferences pref; 

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

     SharedPreferences settings = PreferenceManager.getDefaultSharedPreferences(getActivity().getBaseContext()); 
     String time = settings.getString("TIME", ""); 

     seekBarValue = (TextView)v.findViewById(R.id.seekBarValue); 
     iniCoolTimeValue = (TextView)v.findViewById(R.id.iniCoolTimeValue); 
     secCoolTimeValue = (TextView)v.findViewById(R.id.secCoolTimeValue); 
     thirdCoolTimeValue = (TextView)v.findViewById(R.id.thirdCoolTimeValue); 

     SeekBar seekBar = (SeekBar)v.findViewById(R.id.seekBar); 
     seekBar.setOnSeekBarChangeListener(new SeekBar.OnSeekBarChangeListener() { 

     @Override 
      public void onProgressChanged(SeekBar seekBar, int progress, boolean fromUser) { 

       seekBarValue.setText(String.valueOf(progress)); 

       SharedPreferences settings = PreferenceManager.getDefaultSharedPreferences(getActivity().getBaseContext()); 
       String time = settings.getString("TIME", ""); 

       if (progress >= 0 && progress < 1) { 
        if(time.equals("1")) { 
         iniCoolTimeValue.setText("- hr"); 
         secCoolTimeValue.setText("- hr"); 
         thirdCoolTimeValue.setText("- hr"); 
        } else if(time.equals("2")){ 
         iniCoolTimeValue.setText("- min"); 
         secCoolTimeValue.setText("- min"); 
         thirdCoolTimeValue.setText("- min"); 
        } 
       } 
       else if (progress >= 1 && progress < 13) { 
        if(time.equals("1")){ 
         sum = (482.0-427.0)/55.0; 
         DecimalFormat sumResult = new DecimalFormat("0.0"); 
         iniCoolTimeValue.setText(sumResult.format(sum) + " hr"); 

         sum = (427.0-371.0)/99.0; 
         DecimalFormat sumResult2 = new DecimalFormat("0.0"); 
         secCoolTimeValue.setText(sumResult2.format(sum) + " hr"); 

         sum = (371.0-21.0)/330.0; 
         DecimalFormat sumResult3 = new DecimalFormat("0.0"); 
         thirdCoolTimeValue.setText(sumResult3.format(sum) + " hr"); 
        } else if(time.equals("2")){ 
         sum = (482.0 - 427.0)/55.0 * 60.0; 
         DecimalFormat sumResult = new DecimalFormat("0"); 
         sumResult.setRoundingMode(RoundingMode.HALF_UP); 
         iniCoolTimeValue.setText(sumResult.format(sum) + " min"); 

         sum = (427.0 - 371.0)/99.0 * 60.0; 
         DecimalFormat sumResult2 = new DecimalFormat("0"); 
         sumResult.setRoundingMode(RoundingMode.HALF_UP); 
         secCoolTimeValue.setText(sumResult2.format(sum) + " min"); 

         sum = (371.0 - 21.0)/330.0 * 60.0; 
         DecimalFormat sumResult3 = new DecimalFormat("0"); 
         sumResult.setRoundingMode(RoundingMode.HALF_UP); 
         thirdCoolTimeValue.setText(sumResult3.format(sum) + " min"); 
        } 
       } 
      } 

     }); 

     if(time.equals("1")) { 
      iniCoolTimeValue.setText("- hr"); 
      secCoolTimeValue.setText("- hr"); 
      thirdCoolTimeValue.setText("- hr"); 
     } else if(time.equals("2")) { 
      iniCoolTimeValue.setText("- min"); 
      secCoolTimeValue.setText("- min"); 
      thirdCoolTimeValue.setText("- min"); 
     } 

     return v; 
    } 

    @Override 
    public void onResume() { 
     super.onResume(); 
     registerChangeListener(); 
    } 

    private void registerChangeListener() { 
     final SharedPreferences sp = PreferenceManager.getDefaultSharedPreferences(getActivity()); 

     sp.registerOnSharedPreferenceChangeListener(new SharedPreferences.OnSharedPreferenceChangeListener() { 
      public void onSharedPreferenceChanged(SharedPreferences sharedPreferences, String key) { 
       String time = sp.getString("TIME", ""); 
       if ("1".equals(time)) { 
        sp.edit().putString("TIME", "1").commit(); 
        Log.d("TIME UNIT", time); 
       } else if ("2".equals(time)) { 
        sp.edit().putString("TIME", "2").commit(); 
        Log.d("TIME UNIT", time); 
       } 
      } 
     }); 
    } 
} 

字符串

<string name="time_unit">Time unit</string> 
<string-array name="time_unit"> 
    <item name="hours">Hours</item> 
    <item name="minutes">Minutes</item> 
</string-array> 
<string-array name="listTimeValues"> 
    <item name="hours">1</item> 
    <item name="minutes">2</item> 
</string-array> 
<string name="time_hours">Hours</string> 
<string name="time_minutes">Minutes</string> 

onResume();registerChangeListener();TabFragment2作品,因为当我更改了设置,我看到Android Monitor中出现了日志。

当我离开Preferences并返回到TabFragment的上一个活动时,如何反映设置更改?

回答

0

我已将此代码块从TabFragment2.java移至MainActivity.java,并添加了recreate();到if语句,现在它正在工作!

@Override 
public void onResume() { 
    super.onResume(); 
    registerChangeListener(); 
} 

private void registerChangeListener() { 
    final SharedPreferences sp = PreferenceManager.getDefaultSharedPreferences(this); 

    sp.registerOnSharedPreferenceChangeListener(new SharedPreferences.OnSharedPreferenceChangeListener() { 
     public void onSharedPreferenceChanged(SharedPreferences sharedPreferences, String key) { 
      String time = sp.getString("TIME", ""); 
      if ("1".equals(time)) { 
       sp.edit().putString("TIME", "1").commit(); 
       Log.d("TIME UNIT", time); 
       recreate(); 
      } else if ("2".equals(time)) { 
       sp.edit().putString("TIME", "2").commit(); 
       Log.d("TIME UNIT", time); 
       recreate(); 
      } 
     } 
    }); 
} 
相关问题