My R.string.display_preferences_sort_default_value
is not returning correct value from the strings.xml file. The value declare in strings.xml is "popular", however the value that is returned in the onStart() method is "popularity.desc".
In the onCreate method i initialize the preference manager and in onStart get the sortorder declared in strings.xml
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setHasOptionsMenu(true);
prefs = PreferenceManager.getDefaultSharedPreferences(getActivity());
...
}
public void onStart() {
super.onStart();
// get sort order to see if it has recently changed
String prefSortOrder = prefs.getString(
getString(R.string.display_preferences_sort_order_key),
getString(R.string.display_preferences_sort_default_value)
);
...
}
strings.xml
<string name="display_preferences_sort_order_key">sortType</string>
<string name="display_preferences_sort_default_value">popular</string>
Fragment class: Below is my fragment class. The sortOrder by default has a value popularity.desc
public class MovieListFragment extends Fragment{
private final String LOG_TAG = MovieListFragment.class.getSimpleName();
private final String STORED_MOVIES = "stored_movies";
private SharedPreferences prefs;
private ImageAdapter mMoviePosterAdapter;
String sortOrder;
List<Movie> movies = new ArrayList<Movie>();
public MovieListFragment() {
setHasOptionsMenu(true);
}
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setHasOptionsMenu(true);
prefs = PreferenceManager.getDefaultSharedPreferences(getActivity());
sortOrder = prefs.getString(getActivity().getString(R.string.display_preferences_sort_order_key),
getActivity().getString(R.string.display_preferences_sort_default_value));
if(savedInstanceState != null){
ArrayList<Movie> storedMovies = new ArrayList<Movie>();
storedMovies = savedInstanceState.<Movie>getParcelableArrayList(STORED_MOVIES);
movies.clear();
movies.addAll(storedMovies);
}
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
int id = item.getItemId();
return super.onOptionsItemSelected(item);
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
mMoviePosterAdapter = new ImageAdapter(
getActivity(),
R.layout.list_item_poster,
R.id.list_item_poster_imageview,
new ArrayList<String>());
View rootView = inflater.inflate(R.layout.fragment_movie_list, container, false);
GridView gridView = (GridView) rootView.findViewById(R.id.main_movie_grid);
gridView.setAdapter(mMoviePosterAdapter);
gridView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> adapterView, View view, int position, long l) {
Movie details = movies.get(position);
Intent intent = new Intent(getActivity(), MovieDetailActivity.class)
.putExtra("movies_details", details);
startActivity(intent);
}
});
return rootView;
}
@Override
public void onStart() {
super.onStart();
// get sort order to see if it has recently changed
String prefSortOrder = prefs.getString(getString(R.string.display_preferences_sort_order_key),
getString(R.string.display_preferences_sort_default_value));
if(movies.size() > 0 && prefSortOrder.equals(sortOrder)) {
updatePosterAdapter();
}else{
sortOrder = prefSortOrder;
getMovies();
}
}
@Override
public void onSaveInstanceState(Bundle outState) {
super.onSaveInstanceState(outState);
ArrayList<Movie> storedMovies = new ArrayList<Movie>();
storedMovies.addAll(movies);
outState.putParcelableArrayList(STORED_MOVIES, storedMovies);
}
private void getMovies() {
FetchMoviesTask fetchMoviesTask = new FetchMoviesTask(new AsyncResponse() {
@Override
public void onTaskCompleted(List<Movie> results) {
movies.clear();
movies.addAll(results);
updatePosterAdapter();
}
});
fetchMoviesTask.execute(sortOrder);
}
// updates the ArrayAdapter of poster images
private void updatePosterAdapter() {
mMoviePosterAdapter.clear();
for(Movie movie : movies) {
mMoviePosterAdapter.add(movie.getPoster());
}
}
}