1

У меня есть следующая проблема. Я хотел бы сохранить значения некоторых TextView s, чтобы их можно было получить и отобразить после повторного возврата к этому Fragment (я использую метод replace() для переключения Fragment). Я последовал совету из этого POST, так что мой код выглядит это прямо сейчас:getArguments(). GetString всегда возвращает null в моем фрагменте

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 называется, но loadedLatitude и loadedLongitudeString s всегда null. Что я делаю не так?

ответ

0

Pass Пачка savedInstanceState к refreshUI() метод

Правильный код: refreshUI (savedInstanceState);

Получить его в методе и использовать его:

refreshUI (Bundle а) { Строка loadedLatitude = a.getString (LATITUDE_SAVE)

Это будет работать

+2

Ваше решение не работает все. – fragon

Смежные вопросы