简体   繁体   English

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

[英]I can't display both Persian and English texts together in RecyclerView

I have a RecylcerView which loads it's data from an external server. 我有一个RecylcerView,它从外部服务器加载它的数据。 And each of my items have a TextView. 我的每个项目都有一个TextView。 My problem is that some of my items don't have their related values for TextView when both English and Persian texts are used, and it shows nothing in the TextView. 我的问题是,当使用英文和波斯文本时,我的一些项目没有TextView的相关值,并且它在TextView中没有显示任何内容。 But it perfectly works fine when just one language, either English or Persian is used. 但是当使用一种语言(英语或波斯语)时,它完美地工作。 By one language I mean all of the data in adapter be in one language not just one item. 一种语言我的意思是适配器中的所有数据都是一种语言而不仅仅是一种语言。 Besides, my adapter gets it's data from external server, so I can't store my texts in /res folder. 此外,我的适配器从外部服务器获取它的数据,所以我无法将我的文本存储在/ res文件夹中。 In addition, getText() in my code always shows the correct value. 另外,我的代码中的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);
    }
}

As shown in the picture, there are some items which have empty TextView. 如图所示,有些项目具有空TextView。 The three values for empty items of this picture should be: bb, سلام , bbسلام 此图片中空项的三个值应为:bb,سلام,bbسلام

在此输入图像描述

A short example of multiple viewholders. 多个视图的简短示例。

May be after this your code will be clearer 可能在此之后您的代码将更清晰

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

After researching I figured out that my TextViews become visible after pressing Request Layout button in Hierarchy Viewer tool in Android Studio. 经过研究,我发现在Android Studio的Hierarchy Viewer工具中按下Request Layout按钮后,我的TextViews变得可见了。 So, I added one line to my code after setText() 所以,我在setText()之后在我的代码中添加了一行代码

((ItemViewHolder) viewHolder).dsc.requestLayout();

And after that, everything worked fine. 在那之后,一切都很好。

I would be really thankful If anyone could explain the reason. 如果有人能解释原因,我会非常感激。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM