我创建了一个Custom首选项,它具有以下构造函数
public CoordinatesPreference(Context context, AttributeSet attrs)
{
super(context, attrs);
setLayoutResource(R.layout.coordinates_preference);
}
Run Code Online (Sandbox Code Playgroud)
我有Overriden onCreateView()所以它写入这样的日志:
@Override
protected View onCreateView(ViewGroup parent)
{
Log.d("test", "Creating Preference view");
return super.onCreateView(parent);
}
Run Code Online (Sandbox Code Playgroud)
并且我的日志充满了"Creating Preference view"消息,这会产生滚动的迟钝感觉,我相信转换视图应该解决这个问题,我看看偏好源代码,如果转换视图为null则onCreateView()调用.
为了测试目的,我添加了这个方法:
@Override
public View getView(View convertView, ViewGroup parent)
{
if (convertView == null)
{
return super.getView(convertView, parent);
}
return super.getView(convertView, parent);
}
Run Code Online (Sandbox Code Playgroud)
并设置一个断点.我发现几乎总是我的转换视图为空.因此它必须创建一个新视图,为什么会这样?以及如何改善这一点以避免出现滞后的偏好屏幕?
编辑:更改了onCreate的调用方式,现在它只是我使用的所有android setLayoutResource.但这并没有解决问题......
EDIT2:我已经使用Debug.StartMethodTracing()并且已经发现,因为我怀疑55%的时间花费(当我只是向上和向下滚动时)花费在从if 为null 时onCreateView()调用的方法的首选项的膨胀.getView()convertView
谢谢你,杰森
我遇到了这个问题,我追踪到我在preferences.xml 文件和我的 Preference 子类 onCreateView() 方法中都设置了布局。当我从preferences.xml 中删除布局时,onCreateView() 不再被多次调用。
| 归档时间: |
|
| 查看次数: |
5230 次 |
| 最近记录: |