如何在列表视图的适配器的 getView 中获取上下文
Posted
技术标签:
【中文标题】如何在列表视图的适配器的 getView 中获取上下文【英文标题】:How to get context in getView of adapter for listview 【发布时间】:2013-11-29 12:36:57 【问题描述】:我有三个问题:
我使用 getApplicationContext 与我所见过的所有示例不同,这些示例只是说上下文。我如何在这里获得上下文?还是应用上下文没问题?
我重写 getView 而不是让它自己处理它是否有任何性能损失(我这样做只是为了设置自定义字体)
在使用这种方法时我应该注意什么(因为我只是在复制和粘贴,而不知道如果我的列表中有 250 个项目会做什么)。我可能导致的任何潜在泄漏?
我的代码:
private Typeface arabicFont;
arabicFont = Typeface.createFromAsset(getAssets(), "arabicfont.ttf");
...
_arabicAdapter = new SimpleCursorAdapter(this,
R.layout.book_list_item_arabic,
_cursor,
new String[] "NumberArabic", "Arabic",
new int[] R.id.txtNumber, R.id.txtBookName,
CursorAdapter.NO_SELECTION)
@Override
public View getView(int position, View convertView, ViewGroup parent)
if(convertView == null)
LayoutInflater inflater = (LayoutInflater) getApplicationContext().getSystemService(Context.LAYOUT_INFLATER_SERVICE);
convertView = inflater.inflate(R.layout.book_list_item_arabic, parent, false);
TextView txtBookName = (TextView)convertView.findViewById(R.id.txtBookName);
txtBookName.setTypeface(arabicFont);
txtBookName.setText("\"العربية\"");
return convertView;
;
;
【问题讨论】:
【参考方案1】:public View getView(int position, View convertView, ViewGroup parent)
ViweGroup 的 parent 肯定不为空,所以 parent.getContext() 可能是获取上下文的最佳方式
【讨论】:
【参考方案2】:我使用 getApplicationContext 与我看到的所有示例不同,这些示例只是说上下文。我如何在这里获得上下文?还是应用上下文没问题?
您在这里将this
传递给您的构造函数
_arabicAdapter = new SimpleCursorAdapter(this,
R.layout.book_list_item_arabic,
_cursor,
new String[] "NumberArabic", "Arabic",
new int[] R.id.txtNumber, R.id.txtBookName,
CursorAdapter.NO_SELECTION)
这将是您的Context
,因此您应该在您的Adapter
中有一个变量,它是您在构造函数中分配的Context
类型。
我重写 getView 而不是让它自己处理它是否有任何性能损失(我这样做只是为了设置自定义字体)
我不知道,但如果它只是一种字体,那么您可以在 style
中为您用于 ListView
项目的 TextView
分配它。
在使用这种方法时我应该注意什么(因为我只是复制和粘贴,而不了解如果我的列表中有 250 个项目会做什么)。我可能导致的任何潜在泄漏?
是的,您应该知道,在不理解代码的情况下复制/粘贴代码总是很麻烦。逐行浏览,确保您了解所有内容。
【讨论】:
上下文似乎不支持 getSystemService() 出于某种原因。说不能静态引用 你做得怎么样?您是否创建了一些变量,例如Context c;
,然后将其分配给您在构造函数中传递的上下文,然后执行c.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
?以上是关于如何在列表视图的适配器的 getView 中获取上下文的主要内容,如果未能解决你的问题,请参考以下文章
自定义列表视图适配器 getView 方法被多次调用,并且顺序不一致
listview 项目未在自定义适配器的 getview 方法中显示分配的值