【问题标题】:getArguments().getString always returns null in my FragmentgetArguments().getString 在我的 Fragment 中总是返回 null
【发布时间】:2015-03-07 12:19:53
【问题描述】:

我有以下问题。我想保存一些TextViews的值,以便在返回到这个Fragment后可以检索和显示(我使用replace()方法切换Fragments)。我听从了POST 的建议,所以我的代码现在看起来像这样:

public class NumbersFragment extends Fragment {
    private static final String LONGITUDE_SAVE = "longitudeSave";
    private static final String LATITUDE_SAVE = "latitudeString";

    public TextView tvLatitude;
    public TextView tvLongitude;
    public Button startButton;
    public Button stopButton;

    public NumbersFragment() {
        setArguments(new Bundle());
    }

    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
        View rootView = inflater.inflate(R.layout.numbers_fragment, container, false);
        tvLatitude = (TextView) rootView.findViewById(R.id.tv_latitude);
        tvLongitude = (TextView) rootView.findViewById(R.id.tv_longitude);
        startButton = (Button) rootView.findViewById(R.id.start_button);
        stopButton = (Button) rootView.findViewById(R.id.stop_button);

        refreshUI();

        startButton.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                getActivity().startService(new Intent(getActivity(), RecordService.class));
            }
        });

        stopButton.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                getActivity().stopService(new Intent(getActivity(), RecordService.class));
            }
        });

        //getActivity().setTitle(R.string.record);
        LocalBroadcastManager.getInstance(getActivity().getApplicationContext()).registerReceiver(
                new BroadcastReceiver() {
                    @Override
                    public void onReceive(Context context, Intent intent) {
                        double latitude = intent.getDoubleExtra(RecordService.EXTRA_LATITUDE, 0);
                        double longitude = intent.getDoubleExtra(RecordService.EXTRA_LONGITUDE, 0);
                        //textView.setText("Lat: " + latitude + ", Lng: " + longitude);
                        //tvLocation.setText("Latitude" + Double.toString(latitude) + "Longitude" + Double.toString(longitude));
                        tvLongitude.setText("Longitude: " + Double.toString(longitude));
                        tvLatitude.setText("Latitude: " + Double.toString(latitude));
                    }
                }, new IntentFilter(RecordService.ACTION_LOCATION_BROADCAST)
        );
        return rootView;
    }

    @Override
    public void onPause() {
        super.onPause();
        String latitudeToSave = tvLatitude.getText().toString();
        String longitudeToSave = tvLongitude.getText().toString();
        getArguments().putString(LATITUDE_SAVE, latitudeToSave);
        getArguments().putString(LONGITUDE_SAVE, longitudeToSave);
        Log.d("onPause", latitudeToSave + " " + longitudeToSave);
    }

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

    public void refreshUI() {
        Bundle mySavedInstanceState = getArguments();
        String loadedLatitude = mySavedInstanceState.getString(LATITUDE_SAVE);
        String loadedLongitude = mySavedInstanceState.getString(LONGITUDE_SAVE);
        Log.d("refreshUI", loadedLatitude + " " + loadedLongitude);
        tvLatitude.setText(loadedLatitude);
        tvLongitude.setText(loadedLongitude);
    }
}

问题是在返回Fragment之后调用了refreshUI方法,但是loadedLatitudeloadedLongitudeStrings总是null。我做错了什么?

【问题讨论】:

    标签: android android-fragments android-bundle android-savedstate


    【解决方案1】:

    Bundle savedInstanceState 传递给 refreshUI() 方法

    正确代码: refreshUI(savedInstanceState);

    在方法中接收并使用它:

    refreshUI(Bundle a) { String loadedLatitude = a.getString(LATITUDE_SAVE)

    这会起作用

    【讨论】:

      猜你喜欢
      • 2020-10-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-09-13
      • 1970-01-01
      相关资源
      最近更新 更多