在自定义首选项中经常调用onCreateView()

Jas*_*son 11 android

我创建了一个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

谢谢你,杰森

Tho*_*asW 0

我遇到了这个问题,我追踪到我在preferences.xml 文件和我的 Preference 子类 onCreateView() 方法中都设置了布局。当我从preferences.xml 中删除布局时,onCreateView() 不再被多次调用。