我正在创建一个具有多语言支持的Android应用程序。目前它支持超过15种不同的语言。到目前为止一切都很好。
但现在的要求是将英语与阿拉伯语混合。我有一个ListView来呈现值的ArrayList。 ArrayList几乎没有阿拉伯语文本,很少有英文元素。
阿拉伯语在应用中显得很好。但英文行未显示在TextView上。它将被打印在日志中。
修改-1 它在android 2.3中显得很好。所以,我的估计RTL可能会导致问题。
修改-2 以下是该应用的屏幕截图。正如您在右侧看到的,有些行是白色的。
在右侧的行中,有些数据要从SQLite数据库中提取,有些数据是从Web获取的。从Web获取的数据是阿拉伯语,但SQLite数据是英语。
适配器getView()方法工作正常。在getView()内部,打印英语和阿拉伯语的数据。我甚至在将文本设置到列表行后打印getText(),getText()甚至用英语打印。看起来英文行没有打印或更新。
非常感谢任何帮助。
答案 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中修复了它,并且效果很好。