首页 > 解决方案 > 在 RecyclerView 中预取文本布局,无法解析方法 setTextFuture

问题描述

我正在尝试将 Prefetch Text Layout 添加到我的此处此处reyclerview所示。奇怪的是,它只适用于我的定制而不是标准。对于我的标准 TextView,我得到了错误。 TextViewTextViewsCannot resolve method setTextFuture

另外要补充的是,以前一切正常。标准setText方法适用于 custom 或 regular TextView。我总共有四 (4) 个 TextView,并且都返回相同的错误。我将一个转换为自定义 TextView(即使它不是)并且错误消失了。

这是我清理后的代码。

@Override
public void onBindViewHolder(@NonNull RecyclerViewHolder rvh, int position){
    rvh.setMtbCard(listFiltered_main.get(position));
}

public class RecyclerViewHolder extends RecyclerView.ViewHolder {
    public TextView tv_name;
    public LengthTextView tv_length;

    public RecyclerViewHolder(final View itemView, final int viewType){
        super(itemView);

        tv_name =itemView.findViewById(R.id.tv_name);
        tv_length =itemView.findViewById(R.id.tv_length);

    public void setMtbCard(final TrailsObject trailsObject) {

        //not working... getting "Cannot resolve method setTextFuture" error
        tv_name.setTextFuture(PrecomputedTextCompat.getTextFuture(
                trailsObject.getName_diff(),
                tv_name.getTextMetricsParamsCompat(),
                null)
        );

        //seemingly works fine
        tv_length.setTextFuture(PrecomputedTextCompat.getTextFuture(
                trailsObject.getLength_mi(),
                tv_length.getTextMetricsParamsCompat(),
                null)
        );
    }
}

标签: androidandroid-recyclerviewtextviewprefetch

解决方案


使用AppCompatTextView代替TextView

XML

<android.support.v7.widget.AppCompatTextView
    android:id="@+id/tv_id"
    />

在适配器中

import android.support.v7.widget.AppCompatTextView;

public void onBindViewHolder(@NonNull RecyclerViewHolder rvh, int position){
    rvh.tv.setTextFuture(PrecomputedTextCompat.getTextFuture(
            string_text,
            tv.getTextMetricsParamsCompat(),
            null) //or your executor
    );
}

public class RecyclerViewHolder extends RecyclerView.ViewHolder {
    public final AppCompatTextView tv;

    public RecyclerViewHolder(final View itemView, final int viewType){
        super(itemView);

        tv =itemView.findViewById(R.id.tv_id);


         //......
    }
}

推荐阅读