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

时间:2013-07-04 13:02:07

标签: android

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

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

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

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

修改-2 以下是该应用的屏幕截图。正如您在右侧看到的,有些行是白色的。

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

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

Attached Screenshot

非常感谢任何帮助。

1 个答案:

答案 0 :(得分: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();
}

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

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

我不太确定,但我相信从Android 4.0可以获得RTL支持。它不是很稳定并导致渲染问题。幸运谷歌已经在4.2中修复了它,并且效果很好。