Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/207.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/angular/31.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android onBindViewHolder使用RecyclerView在setText崩溃_Android_Android Recyclerview - Fatal编程技术网

Android onBindViewHolder使用RecyclerView在setText崩溃

Android onBindViewHolder使用RecyclerView在setText崩溃,android,android-recyclerview,Android,Android Recyclerview,我正在尝试实现一个定制的RecyclerView.Adaper,用于虚拟/POC RecyclerView应用程序。我正在使用教程。我的模型名为Movie,有两个字段: @NonNull @PrimaryKey private String name; @NonNull private Integer releaseYear; 所以我有这门课 MovieAdapter extends RecyclerView.Adapter<MovieAdapter.MyViewHolder>

我正在尝试实现一个定制的RecyclerView.Adaper,用于虚拟/POC RecyclerView应用程序。我正在使用教程。我的模型名为
Movie
,有两个字段:

@NonNull
@PrimaryKey
private String name;

@NonNull
private Integer releaseYear;
所以我有这门课

MovieAdapter extends RecyclerView.Adapter<MovieAdapter.MyViewHolder>
我明白了

Process: br.com.basicfeatures, PID: 2555
android.content.res.Resources$NotFoundException: String resource ID #0x7cf
    at android.content.res.Resources.getText(Resources.java:348)
    at android.widget.TextView.setText(TextView.java:5831)
    at br.com.basicfeatures.presentation.adapter.MovieAdapter.onBindViewHolder(MovieAdapter.java:45)
    at br.com.basicfeatures.presentation.adapter.MovieAdapter.onBindViewHolder(MovieAdapter.java:15)
这是MyViewHolder:

// Involves populating data into the item through holder
@Override
public void onBindViewHolder(@NonNull MyViewHolder viewHolder, int position) {
    // Get the data model based on position
    Movie movie = movies.get(position);

    // Set item views based on your views and data model
    TextView tvMovieName = viewHolder.tvMovieName;
    tvMovieName.setText(movie.getName());

    TextView tvMovieReleaseYear = viewHolder.tvMovieReleaseYear;
    tvMovieReleaseYear.setText(movie.getReleaseYear());
}
protected class MyViewHolder extends RecyclerView.ViewHolder {
    private TextView tvMovieName;
    private TextView tvMovieReleaseYear;

    private MyViewHolder(@NonNull View itemView) {
        super(itemView);
        this.tvMovieName = itemView.findViewById(R.id.id_tv_movie_name);
        this.tvMovieReleaseYear = itemView.findViewById(R.id.id_tv_movie_release_year);
    }
}

这是因为
movie.getReleaseYear()
返回一个整数,因此
tvMovieReleaseYear.setText
尝试查找不存在的相应资源文件。因此,您需要将
movie.getReleaseYear()
转换为字符串

tvMovieReleaseYear.setText(movie.getReleaseYear() + "");

movie.getReleaseYear()
的值转换为
String

 tvMovieReleaseYear.setText(String.valueOf(movie.getReleaseYear()));

为什么需要

TextView
中只有两个方法,它们在
setText()
中接受整数,并且都需要
StringRes
。所以,当您尝试设置整数时,它假定您正在尝试从字符串资源设置字符串

因此,要使用
setText()
设置整数,您需要以任何方式将其转换为字符串

下面是我上面提到的两种方法

/**
5821     * Sets the text to be displayed using a string resource identifier.
5822     *
5823     * @param resid the resource identifier of the string resource to be displayed
5824     *
5825     * @see #setText(CharSequence)
5826     *
5827     * @attr ref android.R.styleable#TextView_text
5828     */
5829    @android.view.RemotableViewMethod
5830    public final void setText(@StringRes int resid) {
5831        setText(getContext().getResources().getText(resid));
5832        mTextSetFromXmlOrResourceId = true;
5833        mTextId = resid;
5834    }
5835
5836    /**
5837     * Sets the text to be displayed using a string resource identifier and the
5838     * {@link android.widget.TextView.BufferType}.
5839     * <p/>
5840     * When required, TextView will use {@link android.text.Spannable.Factory} to create final or
5841     * intermediate {@link Spannable Spannables}. Likewise it will use
5842     * {@link android.text.Editable.Factory} to create final or intermediate
5843     * {@link Editable Editables}.
5844     *
5845     * @param resid the resource identifier of the string resource to be displayed
5846     * @param type a {@link android.widget.TextView.BufferType} which defines whether the text is
5847     *              stored as a static text, styleable/spannable text, or editable text
5848     *
5849     * @see #setText(int)
5850     * @see #setText(CharSequence)
5851     * @see android.widget.TextView.BufferType
5852     * @see #setSpannableFactory(Spannable.Factory)
5853     * @see #setEditableFactory(Editable.Factory)
5854     *
5855     * @attr ref android.R.styleable#TextView_text
5856     * @attr ref android.R.styleable#TextView_bufferType
5857     */
5858    public final void setText(@StringRes int resid, BufferType type) {
5859        setText(getContext().getResources().getText(resid), type);
5860        mTextSetFromXmlOrResourceId = true;
5861        mTextId = resid;
5862    }
/**
5821*使用字符串资源标识符设置要显示的文本。
5822     *
5823*@param resid要显示的字符串资源的资源标识符
5824     *
5825*@参见#setText(字符序列)
5826     *
5827*@attr ref android.R.styleable#TextView_text
5828     */
5829@android.view.RemotableViewMethod
5830公共最终无效设置文本(@StringRes int resid){
5831 setText(getContext().getResources().getText(resid));
5832 mTextSetFromXmlOrResourceId=true;
5833 mTextId=剩余;
5834    }
5835
5836    /**
5837*使用字符串资源标识符和
5838*{@link android.widget.TextView.BufferType}。
5839*

5840*必要时,TextView将使用{@link android.text.Spannable.Factory}创建最终或最终版本 5841*中间{@link Spannable}。同样,它将使用 5842*{@link android.text.Editable.Factory}创建最终或中间版本 5843*{@link Editables}。 5844 * 5845*@param resid要显示的字符串资源的资源标识符 5846*@param type a{@link android.widget.TextView.BufferType},定义文本是否为 5847*存储为静态文本、可设置样式的文本或可编辑文本 5848 * 5849*@见#setText(int) 5850*@参见#setText(字符序列) 5851*@请参阅android.widget.TextView.BufferType 5852*@见#设置可编程工厂(可编程工厂) 5853*@请参见#setEditableFactory(Editable.Factory) 5854 * 5855*@attr ref android.R.styleable#TextView_text 5856*@attr ref android.R.styleable#TextView_bufferType 5857 */ 5858公共最终void setText(@StringRes int resd,BufferType){ 5859 setText(getContext().getResources().getText(resid),类型); 5860 mTextSetFromXmlOrResourceId=true; 5861 mTextId=剩余; 5862 }


清理项目并正确检查textview的id。结果表明7cf是1999年的十六进制(我使用的整数值)。现在它让人感觉很好,希望我的回答能有所帮助:)