当前位置: 首页 > 知识库问答 >
问题:

Android r.string未从strings.xml文件返回默认值

景轶
2023-03-14

我的r.string.display_preferences_sort_default_value没有从strings.xml文件返回正确的值。xml中的declare值是“popular”,但是onStart()方法中返回的值是“popularity.desc”。

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

    ...
 }
<string name="display_preferences_sort_order_key">sortType</string>
<string name="display_preferences_sort_default_value">popular</string>
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());
    }
}

共有1个答案

齐夕
2023-03-14

试试这个:

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

参考:在Android.support.v4.app.FragmentPagerAdapter中访问getString()?

 类似资料:
  • 问题内容: 我希望模仿允许用户指定“默认”返回值的内置函数(如)的行为。我最初的尝试是这样做 问题是,如果用户希望成为其返回值,则此函数将引发异常。第二次尝试: 这解决了上述问题,并允许用户指定任何任意值,但是带来了麻烦,因为用户必须始终在其函数调用中进行指定;他们不能只提供最后。同样,可以使用,但如果用户偏爱该语法,则会阻止用户使用。 结合并提供了可行的解决方案,但感觉这需要付出很多努力。它还可

  • 问题内容: 有什么办法可以从中读取文件? 我对库或类/代码文件仅在中定义的字符串不感兴趣 问题答案: 是的,您可以使用以下命令提取所有资源文件 脚步 - 要么

  • 问题内容: 是否有可能为集合中未找到的所有键返回默认值? 问题答案: [更新] 正如其他答案和评论者所指出的那样,从Java 8开始,您可以简单地调用。 [原版的] 没有Map实现可以完全做到这一点,但是通过扩展HashMap来实现自己的实现很简单:

  • 我正在尝试在Spring中使用MessageSource注入文本消息。我编写的程序编译良好,但它总是打印出默认消息,而不是从. Properties文件中获取正确的值。我一点线索也没有。 下面是尝试注入文本的Circle类: 下面是bean配置文件的一部分: 我存储问候语和画图。圈入消息。属性文件,并编写了一个主类。但输出总是: 有人知道我的情况可能会出什么问题吗? 更新感谢您的建议。我正在调试,

  • 我有一个托管在openShift上的wordpress应用程序,使用php-5.4墨盒部署。到今天为止,它再次使用php-5.3二进制文件,这会引发很多错误。我已经重新启动了应用程序以及php墨盒,仍然是相同的错误。我该如何修复这个问题? 哪个php /usr/bin/php php -v PHP警告:PHP启动:无法加载动态库'/usr/lib 64/PHP/modules/LDAP . so

  • 问题内容: 在PHP中,如何从包含的脚本返回到包含它的脚本? IE浏览器: 1-主脚本2-应用程序3-包含 基本上,我想从3返回2,return()不起作用。 代码2-应用 问题答案: includeme.php: main.php: 也给出相同的结果 这是PHP鲜为人知的功能之一,但是对于设置非常简单的配置文件来说可能会很好。