阿拉伯语+;英文文本在android TextView中显示为空

阿拉伯语+;英文文本在android TextView中显示为空,android,Android,我正在创建一个支持多种语言的android应用程序。目前它支持超过15种不同的语言。到目前为止一切都很好 但现在的要求是把英语和阿拉伯语混合起来。我有一个ListView来呈现值的ArrayList。ArrayList几乎没有阿拉伯语文本,也很少有英语元素 阿拉伯语在整个应用程序中表现良好。但文本视图上不显示英文行。它正在日志中打印 编辑-1 它在安卓2.3中看起来不错。所以,我猜RTL可能是造成问题的原因 mOptionsAdapter = null; mOptionsAdapter = ne

我正在创建一个支持多种语言的android应用程序。目前它支持超过15种不同的语言。到目前为止一切都很好

但现在的要求是把英语和阿拉伯语混合起来。我有一个ListView来呈现值的ArrayList。ArrayList几乎没有阿拉伯语文本,也很少有英语元素

阿拉伯语在整个应用程序中表现良好。但文本视图上不显示英文行。它正在日志中打印

编辑-1 它在安卓2.3中看起来不错。所以,我猜RTL可能是造成问题的原因

mOptionsAdapter = null;
mOptionsAdapter = new CategoriesAdapter(mContext);
final ArrayList<CategoriesItem> optionsList = getData();
mOptionsAdapter.setDatasource(optionsList);
mOptionsyListView.setAdapter(mOptionsAdapter);
mOptionsAdapter.notifyDataSetChanged();
编辑-2 下面是该应用程序的屏幕截图。正如您在右侧看到的,一些行是白色的

在右边的行中,有些数据要从SQLite数据库中获取,有些数据要从web中获取。从web获取的数据是阿拉伯语,但SQLite数据是英语

适配器getView()方法工作正常。在getView()中,以英语和阿拉伯语打印数据。我甚至在将文本设置到列表行后打印了getText(),getText()甚至是用英语打印的。看起来没有打印或更新英文行


非常感谢您的帮助。

这是关于ListView呈现问题的一个非常奇怪的观察结果。我只是在适配器为空时初始化它,所做的任何更改或刷新都是使用notifyDataSetChanged()完成的。但这会导致渲染延迟

if (mOptionsAdapter == null) {
        mOptionsAdapter = new CategoriesAdapter(mContext);
        final ArrayList<CategoriesItem> optionsList = getData();
        mOptionsAdapter.setDatasource(optionsList);
        mOptionsyListView.setAdapter(mOptionsAdapter);
        mOptionsAdapter.notifyDataSetChanged();
} else {
        mOptionsAdapter = new CategoriesAdapter(mContext);
        final ArrayList<CategoriesItem> optionsList = getData();
        mOptionsyListView.setAdapter(mOptionsAdapter);
        mOptionsAdapter.setDatasource(optionsList);
        mOptionsAdapter.notifyDataSetChanged();
}
if(mOptionsAdapter==null){
mOptionsAdapter=新类别适配器(mContext);
最终ArrayList选项列表=getData();
mOptionsAdapter.setDatasource(选项列表);
setAdapter(mOptionsAdapter);
mOptionsAdapter.notifyDataSetChanged();
}否则{
mOptionsAdapter=新类别适配器(mContext);
最终ArrayList选项列表=getData();
setAdapter(mOptionsAdapter);
mOptionsAdapter.setDatasource(选项列表);
mOptionsAdapter.notifyDataSetChanged();
}
更改为,每次取消适配器并再次重新创建解决了问题

mOptionsAdapter = null;
mOptionsAdapter = new CategoriesAdapter(mContext);
final ArrayList<CategoriesItem> optionsList = getData();
mOptionsAdapter.setDatasource(optionsList);
mOptionsyListView.setAdapter(mOptionsAdapter);
mOptionsAdapter.notifyDataSetChanged();
mOptionsAdapter=null;
mOptionsAdapter=新类别适配器(mContext);
最终ArrayList选项列表=getData();
mOptionsAdapter.setDatasource(选项列表);
setAdapter(mOptionsAdapter);
mOptionsAdapter.notifyDataSetChanged();

我不是很确定,但我相信随着RTL支持wad从Android 4.0开始提供。它不是很稳定,并导致渲染问题。幸运的是,谷歌已经在4.2中修复了这一问题,而且效果很好

你能发布一些你想要的代码或屏幕截图吗have@androidqq6.I使用屏幕截图更新了问题。您能使用canvas.drawText()同时绘制阿拉伯语和英语字符串吗?没有问题?@StevenHuang。是的,我能同时使用英语和阿拉伯语。在我的适配器中,我已经为前两行硬编码以显示英语,并且它正在工作。大家好,我已经修复了这个缺陷。谢谢。我对阿拉伯语也有类似的问题,我的listview有不可见的文本,我在setSingleLine中发现了问题,所以我删除了setSingleLine();和使用的setMaxLines(1);setEllipsize(TextUtils.TruncateAt.END);希望这对别人有帮助。