2016-10-13 4 views
0

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()); 
    } 
} 

}

+0

Я пробовал модифицировать метод getstring(), но проблема все еще сохраняется. Раньше у меня была популярность.desc, но позже я обновил файл strings.xml, и я убедился, что я снова очищаю и перестраиваю проект. –

+0

Я немного смущен. Вы говорите, что 'getString (R.string.display_preferences_sort_default_value)' возвращает «popular.desc» вместо «популярного»? Поддерживаете ли вы различные строковые ресурсы на основе языка? –

+0

Нет только одной строки.xml. –

ответ

0

Попробуйте это:

String prefSortOrder = prefs.getString(getActivity().getString(R.string.display_preferences_sort_order_key),getActivity().getString(R.string.display_preferences_sort_default_value)); 

Ссылка: Access to getString() in android.support.v4.app.FragmentPagerAdapter?

+0

Это еще не работает. Я использовал getActivity() в методе getstring() –

+0

Не связанный с проблемой, просто предложение, используйте пустой конструктор для фрагмента. Похоже, вы используете Preference, который используется для управления/сохранения настроек интерфейса интерфейса UI (несколько параметров). Но если вам нужен отдельный элемент, то перейдите к SharedPreference. Проверьте эти ссылки: [1] http://stackoverflow.com/questions/33447290/whats-the-difference-between-getdefaultsharedpreferences-and-getpreferences [2] https://developer.android.com/guide /topics/ui/settings.html –

0

предыдущее значение предпочтения хранилась в SharedPreferences от предыдущая версия кода. Я удалил и -установил пакет, и он сработал

+0

Отлично! Все за ничего – Shivansh

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