【问题标题】:Refreshing a fragment View on back from settings change从设置更改刷新片段视图
【发布时间】:2013-05-09 18:54:54
【问题描述】:

我想要完成的是当有人从设置中返回并更改他们的偏好时刷新我的视图。我认为这会起作用,但事实并非如此。关于我如何实现这一点的任何想法?

    import java.text.SimpleDateFormat;
    import java.util.Calendar;
    import com.projectcaruso.naturalfamilyplanning.R;
    import android.annotation.SuppressLint;
    import android.app.DatePickerDialog.OnDateSetListener;
    import android.content.SharedPreferences;
    import android.os.Bundle;
    import android.preference.PreferenceManager;
    import android.support.v4.app.Fragment;
    import android.view.LayoutInflater;
    import android.view.View;
    import android.view.ViewGroup;
    import android.widget.DatePicker;
    import android.widget.TextView;

    public class ChartingFragment extends Fragment implements OnDateSetListener {
        SharedPreferences mPreferences;
        Boolean symptothermal;
        Boolean mucus_stamps;
        Boolean fertile_infertile;

        @Override
        public void onDateSet(DatePicker view, int year, int monthOfYear, int dayOfMonth) {
            // TODO Auto-generated method stub
        }    

        public void showDatePickerDialog(View v) {
            DatePickerFragment newFragment = new DatePickerFragment();
            newFragment.show(getChildFragmentManager(), "datePicker");
        }

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

        private void init() {
            mPreferences = PreferenceManager.getDefaultSharedPreferences(getActivity());
            symptothermal = mPreferences.getBoolean("symptothermal", true);
            mucus_stamps = mPreferences.getBoolean("mucus_stamps", true);
            fertile_infertile = mPreferences.getBoolean("fertile_infertil", true);
        }

        @SuppressLint("SimpleDateFormat")
        @Override
        public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
            View view;

            view = setcontrolvisability(inflater);

            return view;
           }

        @Override
        public void onResume() { 
              super.onResume(); 
              View vg = getView().findViewById(R.id.charting);
              vg.invalidate();
              init();

        }

        private View setcontrolvisability(LayoutInflater inflater) {
            // TODO Auto-generated method stub
            View view = inflater.inflate(R.layout.fragment_charting, null);
            TextView temp;
            if (!symptothermal) {
                    temp = (TextView) view.findViewById(R.id.temp);
                    temp.setVisibility(View.GONE);
                    temp = (TextView) view.findViewById(R.id.tempvalue);
                    temp.setVisibility(View.GONE);
                }

            if (!mucus_stamps) {
                temp = (TextView) view.findViewById(R.id.stamp);
                temp.setVisibility(View.GONE);
                temp = (TextView) view.findViewById(R.id.stampvalue);
                temp.setVisibility(View.GONE);
            }

            if (!fertile_infertile) {
                temp = (TextView) view.findViewById(R.id.fertile);
                temp.setVisibility(View.GONE);
                temp = (TextView) view.findViewById(R.id.fertileswitch);
                temp.setVisibility(View.GONE);
            }

            temp  = (TextView) view.findViewById(R.id.dateselected);
            SimpleDateFormat dfDate_day= new SimpleDateFormat("MM/dd/yyyy");
            String dt="";
            Calendar c = Calendar.getInstance(); 
            dt=dfDate_day.format(c.getTime());
            temp.setText(dt);

            return view;
        }


    }

【问题讨论】:

    标签: android android-fragments android-nested-fragment


    【解决方案1】:

    如果子活动 (FragmentActivity) 已更改,我建议使用 startActivityForResult 并传递一个 Bundle。

    1) 从您的 Activity 启动 Preference Activity:

    Intent intent = new Intent(this, PreferenceActivity.class);
    if (!this.isFinishing())
    startActivityForResult(intent, REQUEST_UPDATE);
    

    2) 覆盖 onActivityResult

    @Override
    protected void onActivityResult(int reqCode, int resCode, Intent data) {
        super.onActivityResult(reqCode, resCode, data);
        Log.d(TAG, "Received Result: " + reqCode + " / " + resCode);
    }
    

    3) 在 Subactivity (PreferenceActivity) 中监视哪些键已更改,如果您愿意,可以将其作为捆绑包传递

    public class PrefsFragment extends PreferenceFragment implements OnSharedPreferenceChangeListener,
        OnPreferenceChangeListener {
    
        @Override
        public void onCreate(Bundle savedInstanceState) {
           super.onCreate(savedInstanceState);
    
           // Load the preferences from an XML resource
           addPreferencesFromResource(R.xml.preferences);
        }
    
        @Override
        public boolean onPreferenceChange(Preference arg0, Object arg1) {
            getParent().setResult(MainActivity.RESULT_PREFERENCES_CHANGED); // constant
        }
    
    @Override
    public void onResume() {
        super.onResume();
        getPreferenceManager().getSharedPreferences().registerOnSharedPreferenceChangeListener(this);
    }
    
    @Override
    public void onPause() {
    getPreferenceManager().getSharedPreferences().unregisterOnSharedPreferenceChangeListener(this);
        super.onPause();
    }
    }
    

    【讨论】:

      猜你喜欢
      • 2015-05-22
      • 1970-01-01
      • 1970-01-01
      • 2010-12-10
      • 2012-09-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多