My R.string.display_preferences_sort_default_value
не возвращает правильное значение из файла strings.xml. Значение declare в strings.xml является «популярным», однако значение, возвращаемое в методе onStart(), - «popular.desc».Android R.string не возвращает значение по умолчанию из файла strings.xml
В методе OnCreate я инициализировать менеджер предпочтений и OnStart получить SortOrder объявленный в 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>
Фрагмент класса: Ниже мой класс фрагмент. SortOrder по умолчанию имеет значение 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());
}
}
}
Я пробовал модифицировать метод getstring(), но проблема все еще сохраняется. Раньше у меня была популярность.desc, но позже я обновил файл strings.xml, и я убедился, что я снова очищаю и перестраиваю проект. –
Я немного смущен. Вы говорите, что 'getString (R.string.display_preferences_sort_default_value)' возвращает «popular.desc» вместо «популярного»? Поддерживаете ли вы различные строковые ресурсы на основе языка? –
Нет только одной строки.xml. –