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

Nil*_*hal 3 android

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

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

阿拉伯语在应用程序中显得很好.但英文行未显示在TextView上.它将被打印在日志中.

编辑-1 它在android 2.3中显得很好.所以,我的估计RTL可能会导致问题.

编辑-2 以下是该应用程序的屏幕截图.正如您在右侧看到的,有些行是白色的.

在右侧的行中,一些数据将从SQLite数据库中获取,一些数据将从Web获取.从Web获取的数据是阿拉伯语,但SQLite数据是英语.

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

附上截图

任何帮助深表感谢.

Nil*_*hal 5

这是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();
}
Run Code Online (Sandbox Code Playgroud)

更改为,每次使适配器无效并重新创建再次解决了问题.

mOptionsAdapter = null;
mOptionsAdapter = new CategoriesAdapter(mContext);
final ArrayList<CategoriesItem> optionsList = getData();
mOptionsAdapter.setDatasource(optionsList);
mOptionsyListView.setAdapter(mOptionsAdapter);
mOptionsAdapter.notifyDataSetChanged();
Run Code Online (Sandbox Code Playgroud)

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