我无法在RecyclerView中同时显示波斯语和英语文本

3
我有一个RecylcerView,它从外部服务器加载数据。每个项目都有一个TextView。我的问题是,当使用英语和波斯语文本时,某些项目的TextView没有相关值,并且在TextView中显示为空白。但是,当只使用一种语言(英语或波斯语)时,它可以完美地工作。我的意思是适配器中的所有数据都是一种语言,而不仅仅是一个项目。 此外,我的适配器从外部服务器获取其数据,因此无法将文本存储在/res文件夹中。另外,在我的代码中getText()始终显示正确的值。
@Override
public void onBindViewHolder(RecyclerView.ViewHolder viewHolder, int i) {
    if(viewHolder instanceof ItemViewHolder) {
        final CategoryItem nature = mItems.get(i);
        String itemName = mItems.get(i).getName();

        //This line of code doesn't work for some items when both English and Arabic texts are used
        ((ItemViewHolder) viewHolder).dsc.setText(itemName);

        //This line of code shows the correct values at all times
        System.out.println("itemName " + ((ItemViewHolder) viewHolder).dsc.getText());

    }else{
        ((ProgressViewHolder)viewHolder).progressBar.setIndeterminate(true);
    }
}

如图所示,有一些项目具有空的TextView。此图片中空项目的三个值应为:bb,سلام,bbسلام。

enter image description here


为什么不使用自定义的ViewHolder,而是使用RecyclerView.ViewHolder,并且不使用((ItemViewHolder) viewHolder)? - Vlad
因为我有两个ViewHolders,它们展示了两种不同的东西。我想在方法中选择要显示哪一个。如何使用一个自定义ViewHolder在两者之间进行选择? - Pouria Faraji
好的。如果你想,我可以展示如何做到。 - Vlad
@V.Kalyuzhnyu 是的,请给我展示,谢谢。 - Pouria Faraji
@ootinii 有些项目只是英文,有些则只是阿拉伯语,但它们并没有区别,根本不会显示出来。但是还有一些其他模式相同的项目总是会被显示出来。 - Pouria Faraji
显示剩余5条评论
2个回答

1
在研究后,我发现在Android Studio的层次结构查看器工具中按下“请求布局”按钮后,我的TextView才会变为可见。因此,我在setText()之后添加了一行代码: ((ItemViewHolder) viewHolder).dsc.requestLayout(); 然后,一切都正常工作了。如果有人能解释原因,我将非常感激。

1

多个视图持有者的简短示例。

也许在这之后,您的代码会变得更加清晰。

public class yourAdapter extends RecyclerView.Adapter<RecyclerView.ViewHolder> {
class ItemViewHolder extends RecyclerView.ViewHolder {
    ...
}

class ProgressViewHolder extends RecyclerView.ViewHolder {
    ...
}

@Override
public int getItemViewType(int position) {
    //here is the place where viewholder may choose
    return position;
}

@Override
public RecyclerView.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
     switch (viewType) {
         case 0: return new ItemViewHolder(...);
         case 1: return new ProgressViewHolder(...);
         ...
     }
  }
}

是的,这正是我所使用的。我只发布了我的onBindViewHolder方法。 - Pouria Faraji

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接